2、用w32dasm黄金版中文版对EXESCOPE.exe(也就是eXeScope 6.30的主文件)静态态反汇编,再用“串式数据参考”,找到"无效 ID 或名称"(多经典的句子呀),双击来到下面代码段: 注:用w32dasm黄金版中文版静态反汇编的注要目的在于,能够很快定位到软件注册部分的关键部分,而软件具体是如何运行的,还是要在TRW2000中文1.23注册版里调试
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:004A60F5(U), :004A61D7(U) | :004A61F9 33C0 xor eax, eax :004A61FB 5A pop edx :004A61FC 59 pop ecx :004A61FD 59 pop ecx :004A61FE 648910 mov dword ptr fs:[eax], edx :004A6201 6828624A00 push 004A6228
* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:004A6226(U) | :004A6206 8D45EC lea eax, dword ptr [ebp-14] :004A6209 BA03000000 mov edx, 00000003 :004A620E E8C9D9F5FF call 00403BDC :004A6213 8D45F8 lea eax, dword ptr [ebp-08] :004A6216 BA02000000 mov edx, 00000002 :004A621B E8BCD9F5FF call 00403BDC :004A6220 C3 ret
:004A6221 E90ED4F5FF jmp 00403634 :004A6226 EBDE jmp 004A6206 :004A6228 5F pop edi :004A6229 5E pop esi :004A622A 5B pop ebx :004A622B 8BE5 mov esp, ebp :004A622D 5D pop ebp :004A622E C3 ret ...... ......
* Possible StringData Ref from Code Obj ->"A1910" | :004AE24C B8D4E24A00 mov eax, 004AE2D4 <===在这里面放一个算ID的数字A1910进行比较 :004AE251 E8CE5EF5FF call 00404124 <===一个关键的CALL(看输入的ID前5个是不是A1910),F8跟进 :004AE256 48 dec eax :004AE257 7410 je 004AE269 <===当输入的ID前5位是A1910则正确跳转 :004AE259 8B55FC mov edx, dword ptr [ebp-04]
* Possible StringData Ref from Code Obj ->"A1423"<===如果不是A1910,则看是不是A1423 | :004AE25C B8E4E24A00 mov eax, 004AE2E4 :004AE261 E8BE5EF5FF call 00404124 <===一个关键的CALL(看输入的ID前5个是不是A1423) :004AE266 48 dec eax :004AE267 753F jne 004AE2A8 <===当输入的ID前5位是A1423则不跳转了,执行下一行 <===一个关键的CALL(看输入的ID前5个是不是A1423),有两次机会,到这里我们可以初步推断ID的形式是A1910XXXXX或A1423XXXXX(必须是10位),将ID改为A191078787,重新来。
* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:004AE257(C) | :004AE269 B802000000 mov eax, 00000002 <===EAX的初始值是2 <===如果ID前5位是A1910或A1423,则运行到这里
:00404124 85C0 test eax, eax :00404126 7440 je 00404168 :00404128 85D2 test edx, edx <===看是否输入了ID :0040412A 7431 je 0040415D <===如果输入ID为空,则跳走,报错! :0040412C 53 push ebx :0040412D 56 push esi :0040412E 57 push edi :0040412F 89C6 mov esi, eax <===EAX=A1910 :00404131 89D7 mov edi, edx <===EDX=第二次输入的假ID(A191078787) :00404133 8B4FFC mov ecx, dword ptr [edi-04] <===ecx=10假码长度 :00404136 57 push edi :00404137 8B56FC mov edx, dword ptr [esi-04] <===edx=5(A1910长度) :0040413A 4A dec edx <===EDX=EDX-1=4 :0040413B 781B js 00404158 <===不会跳 :0040413D 8A06 mov al, byte ptr [esi] :0040413F 46 inc esi :00404140 29D1 sub ecx, edx <===ECX=ECX-EDX=10-4=6 :00404142 7E14 jle 00404158 <===不会跳
* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00404156(U) | :00404144 F2 repnz :00404145 AE scasb <===检测输入的ID第一个是不是A(大写) :00404146 7510 jne 00404158 :00404148 89CB mov ebx, ecx :0040414A 56 push esi :0040414B 57 push edi :0040414C 89D1 mov ecx, edx :0040414E F3 repz :0040414F A6 cmpsb <===依次检测输入的ID第2位到5是不是1910或1423 :00404150 5F pop edi :00404151 5E pop esi :00404152 740C je 00404160 <===如果上面字符都匹配,则这里正确跳转 :00404154 89D9 mov ecx, ebx :00404156 EBEC jmp 00404144
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:0040413B(C), :00404142(C), :00404146(C) | :00404158 5A pop edx :00404159 31C0 xor eax, eax :0040415B EB08 jmp 00404165
* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0040412A(C) | :0040415D 31C0 xor eax, eax :0040415F C3 ret
* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00404152(C) | :00404160 5A pop edx <===跳到这里 :00404161 89F8 mov eax, edi :00404163 29D0 sub eax, edx <===将EAX置1
* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0040415B(U) | :00404165 5F pop edi :00404166 5E pop esi :00404167 5B pop ebx
* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00404126(C) | :00404168 C3 ret