逆向TraceMe.exe

逆向TraceMe.exe

首先我们得找到关键函数,就是关键跳,修改后能够直接破解成功的步骤,我们知道这个程序是有对话框的,所以我们在window的对话框api上下断点

img

首先尝试随便输入用户名和序列号

img

可以看到这个时候触发了断点在0x75D4E290处

img

直接使用f9跳转到返回的地方,跳过一些api函数后,这里这两个我认为应该都是读取对话框的函数。

img

我们继续单步运行,这里注意到,当运行到图中所示地址时,eax和edx就出现了我们输入的内容

img img

之后会call 401340这个函数,我认为这个是一个关键函数

img

经过调试分析,这个函数的大概逻辑如下

img

0x405030的地方存储的数值如下

img

继续运行,可以看到ecx=7的时候就跳出了这个循环

img img

执行完之后,貌似得到2675,可能是密钥值,因为之后的函数把string2“ebp:2675“和string1”abcdefg“进行比较了

img img img

比较函数过后会来到这个地方,test eax,eax,表示eax为1时跳转,这里我们的eax是0,尝试修改为jne

img

之后可以看到是成功的,说明这个就是关键跳

img

我们要写一个注册机程序那就得先逆向他的加密代码,根据我们判断以下的逻辑

img

写出python脚本代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# -*- coding: utf-8 -*-
a=str(raw_input("请输入用户名:"))
yanzhen=[0x0C ,0x0A ,0x13 ,0x09 ,0x0C ,0x0B ,0x0A ,0x08]
edi=len(a)
#print len(a)
ecx=3
esi=0
eax=0
while ecx<edi:
if eax>7:
eax=0
ebx=0
edx=0
edx=ord(a[ecx])
ebx=yanzhen[eax]
#print "ebx=" + str(ebx)
#print "edx=" + str(edx)
ebx=edx*ebx
esi=ebx+esi
ecx+=1
eax+=1
print "序列号为:"+ str(esi)
img

验证

imgimg


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!,本博客仅用于交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 文章作者拥有对此站文章的修改和解释权。如欲转载此站文章,需取得作者同意,且必须保证此文章的完整性,包括版权声明等全部内容。未经文章作者允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。若造成严重后果,本人将依法追究法律责任。 阅读本站文章则默认遵守此规则。