MrBills(扫描器)
1.运行软件,因为没有注册功能不去,所以就到注册的地方

搜索字符串--下断点


在call下断点,运行--(在窗口进入注册)--进入call--继续



重新运行,进入第二个call

看到call MrBills.004860C8,思考,要不要进入这个call

*可以通过回车来进入看这个call内容

这个call对eax影响不大,继续往下看到


因此在mov bl,al指令上面的call也需进入,可能会影响al的值,做好注释和断点,进入
继续F8,一边F8一边观察AL,bl的变化,发现这两条指令改变了bl,再往下还把值给了al,然后就返回到第二层(Base camp2)






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的地方



保存运行




