1.运行软件,因为没有注册功能不去,所以就到注册的地方
搜索字符串--下断点
分析,该字符串有上面有跳转jnz short MrBills.004C1370 (jnz跳转条件:ZF=0)这个跳转能跳过字符串,所以为关键跳转,做好注释和断点,
继续分析跳转条件,pop push均不影响标志位,test al,al是与运算(同时为1才是1)因此可以知道当al为1时就跳转,[xor
ebx,ebx为exb置零],
继续分析,什么影响al的值?之前说过所有call的返回值都存在eax,所以上面的call MrBill.0040714C就也要进入观察,做好注释
在call下断点,运行--(在窗口进入注册)--进入call--继续
先简单看看代码,有两个
call 00406FD1
test al,al
call 0040701D
test al,al
会影响al的值,即校检不只一个,因此两个都注释一下,
先不进入call,简单运行一下代码到base camp,观察eax变化,在
call 00406FD1
test al,al
之后eax为0
call 0040701D
test al,al
之后eax仍然为0 经过jmp MrBills.00407069后,eax变成了一个数,这就不关注册已否定关系,运行返回到BASE CAMP(下一条命令)
重新运行,进入第二个call
看到call MrBills.004860C8,思考,要不要进入这个call
*可以通过回车来进入看这个call内容
这个call对eax影响不大,继续往下看到
mov bl,al
call...(运算)
mov...
mov al,bl
作用:
1.可能bl用来暂时保存al,call里会改变al判断是否已注册,在把bl值返回al
2.把值给bl,call会经过一定算法改变bl的值,再把值给回al
因此在mov bl,al指令上面的call也需进入,可能会影响al的值,做好注释和断点,进入
继续F8,一边F8一边观察AL,bl的变化,发现这两条指令改变了bl,再往下还把值给了al,然后就返回到第二层(Base camp2)
而且观察下面的可进入2,发现和前面的可进入2是一样的算法,因此先改二,回到可进入2(Base Camp2)进入Base Camp2,回到刚刚改变bl的地方


保存运行