一个小程序,来验证输如的序列号是否正确
用IDA对程序进行反汇编,这里就是关键代码
f5反汇编可进行对照
.text:004010AF call ds:GetDlgItemTextA //调用输入函数
.text:004010B5 lea edx, [esp+14h+String2]
.text:004010B9 lea eax, [esp+14h+String]
.text:004010BD push edx ; lpString2
.text:004010BE push eax ; lpString1
.text:004010BF call ds:lstrcmpA //调用比较函数
.text:004010C5 test eax, eax
.text:004010C7 push 0 ; uType
.text:004010C9 jnz short loc_4010E8
.text:004010CB push offset Caption ; "OK!"
.text:004010D0 push offset Text ; lpText
.text:004010D5 push 0 ; hWnd
.text:004010D7 call ds:MessageBoxA
.text:004010DD mov eax, 1
.text:004010E2 add esp, 14h
.text:004010E5 retn 10h
这里调用lstrcopA函数来进行比较,test 的作用是按位与,仅改变标志寄存器的值。这里的test eax,eax 作用是检测 eax是否为空,如果eax为空,则设置zf 零标志位为1,(jne指令,if(zf = 0 )则跳转)
如果想将程序改为接受任何注册码,只需要将jne改为je或者空指令nop
先修改汇编指令,jne指令共两个字节,因此用两个nop代替
再将修改保存到文件中
结果输入任意序列号,均提示注册成功