此炒股软件加了壳(脱壳方法见脱壳区),脱壳后运行此炒股软件,会出现注册框,
1、用C32Asm载入程序,查找字符串“注册码错误,请直接联系**投资”,调用语句是007303FE,往上找到跳转语句,确定在007303D6下断。
2、用OD载入程序,在007303D6下断,运行,出现注册框,输入假码“12345679—09876543—76543210”,点“确定”,程序中断在007303D6,如下:
007303D6 E8 06032300 call 009606E1 中断在此
007303DB 8B4424 24 mov eax, dword ptr [esp+24]
007303DF 50 push eax
007303E0 E8 9B7DE4FF call 00578180 在此F7跟进
007303E5 83C4 18 add esp, 18
007303E8 85C0 test eax, eax
007303EA 5D pop ebp
007303EB 5B pop ebx
007303EC 75 55 jnz short 00730443
跟进如下:
00578180 64:A1 00000000 mov eax, dword ptr fs:[0]
00578186 6A FF push -1
00578188 68 6B819B00 push 009B816B
0057818D 50 push eax
0057818E 64:8925 0000000>mov dword ptr fs:[0], esp
00578195 81EC 08030000 sub esp, 308
0057819B 56 push esi
0057819C 57 push edi
0057819D E8 8E082100 call 00788A30
005781A2 8B9424 20030000 mov edx, dword ptr [esp+320]
005781A9 85D2 test edx, edx
005781AB 0F84 85010000 je 00578336
005781B1 33C0 xor eax, eax
005781B3 B9 3F000000 mov ecx, 3F
005781B8 8D7C24 10 lea edi, dword ptr [esp+10]
005781BC F3:AB rep stos dword ptr es:[edi]
005781BE 66:AB stos word ptr es:[edi]
005781C0 AA stos byte ptr es:[edi]
005781C1 33C0 xor eax, eax
005781C3 B9 3F000000 mov ecx, 3F
005781C8 8DBC24 10020000 lea edi, dword ptr [esp+210]
005781CF F3:AB rep stos dword ptr es:[edi]
005781D1 66:AB stos word ptr es:[edi]
005781D3 AA stos byte ptr es:[edi]
005781D4 8D8424 10020000 lea eax, dword ptr [esp+210]
005781DB 50 push eax
005781DC 8D4C24 14 lea ecx, dword ptr [esp+14]
005781E0 51 push ecx
005781E1 52 push edx
005781E2 E8 29FEFFFF call 00578010 算法语句,F7跟进(1)
005781E7 8D5424 18 lea edx, dword ptr [esp+18]
005781EB 52 push edx
005781EC C74424 1C 10000>mov dword ptr [esp+1C], 10
005781F4 E8 B7FEFFFF call 005780B0
005781F9 83C4 10 add esp, 10
005781FC 85C0 test eax, eax
005781FE 0F84 1F010000 je 00578323
00578204 8B4C24 0C mov ecx, dword ptr [esp+C]
00578208 51 push ecx
00578209 50 push eax
0057820A E8 C1621100 call 0068E4D0
0057820F 8B15 4C1FB700 mov edx, dword ptr [B71F4C] ; dumped_.00B71F60
00578215 83C4 08 add esp, 8
00578218 895424 08 mov dword ptr [esp+8], edx
0057821C 50 push eax
0057821D 8D4424 0C lea eax, dword ptr [esp+C]
00578221 68 0C2FB300 push 00B32F0C ; ASCII "%X"
00578226 50 push eax
00578227 C78424 24030000>mov dword ptr [esp+324], 0
00578232 E8 AA843E00 call 009606E1
00578237 33C0 xor eax, eax
00578239 C68424 1C010000>mov byte ptr [esp+11C], 0
00578241 B9 3F000000 mov ecx, 3F ECX的值是根据指纹码算出的值“1E589295”
00578246 8DBC24 1D010000 lea edi, dword ptr [esp+11D]
0057824D F3:AB rep stos dword ptr es:[edi]
0057824F 83C4 0C add esp, 0C
00578252 6A 00 push 0
00578254 8D4C24 0C lea ecx, dword ptr [esp+C]
00578258 66:AB stos word ptr es:[edi]
0057825A E8 872E3F00 call 0096B0E6
0057825F 83C9 FF or ecx, FFFFFFFF
00578262 8BF8 mov edi, eax
00578264 33C0 xor eax, eax
00578266 F2:AE repne scas byte ptr es:[edi]
00578268 F7D1 not ecx
0057826A 2BF9 sub edi, ecx
0057826C 8BC1 mov eax, ecx
0057826E C1E9 02 shr ecx, 2
00578271 8BF7 mov esi, edi
00578273 8D9424 10010000 lea edx, dword ptr [esp+110]
0057827A 8BFA mov edi, edx
0057827C F3:A5 rep movs dword ptr es:[edi], dword ptr [esi]
0057827E 8BC8 mov ecx, eax
00578280 83E1 03 and ecx, 3
00578283 F3:A4 rep movs byte ptr es:[edi], byte ptr [esi]
00578285 33C0 xor eax, eax
00578287 8A8C04 10010000 mov cl, byte ptr [esp+eax+110] 依次取“1E589295”的ASCII值放入CL里面
0057828E 3A4C04 10 cmp cl, byte ptr [esp+eax+10] 与注册码算出的值进行比较
00578292 75 79 jnz short 0057830D 不等则跳走,游戏玩完
跟进(1)如下:
00578010 83EC 0C sub esp, 0C
00578013 53 push ebx
00578014 55 push ebp
00578015 56 push esi
00578016 33C0 xor eax, eax
00578018 57 push edi
00578019 894424 10 mov dword ptr [esp+10], eax
0057801D 894424 14 mov dword ptr [esp+14], eax
00578021 8D4C24 18 lea ecx, dword ptr [esp+18]
00578025 51 push ecx
00578026 8B4C24 24 mov ecx, dword ptr [esp+24]
0057802A 8D5424 18 lea edx, dword ptr [esp+18]
0057802E 52 push edx
0057802F 894424 20 mov dword ptr [esp+20], eax
00578033 8D4424 18 lea eax, dword ptr [esp+18]
00578037 50 push eax
00578038 68 100FB400 push 00B40F10 ; ASCII "%X-%X-%X"
0057803D 51 push ecx
0057803E E8 109D3B00 call 00931D53
00578043 8B5C24 3C mov ebx, dword ptr [esp+3C]
00578047 83C4 14 add esp, 14
0057804A 33C9 xor ecx, ecx
0057804C 8D7C24 10 lea edi, dword ptr [esp+10]
00578050 33F6 xor esi, esi
00578052 8B07 mov eax, dword ptr [edi] 先取第一框注册码“12345679”,之后循环把注册码右移,取八个字符
00578054 D3E8 shr eax, cl 逻辑右移,CL依次取“00,06,04,02”
00578056 8BD6 mov edx, esi
00578058 24 3F and al, 3F 运算
0057805A 81E2 01000080 and edx, 80000001
00578060 79 05 jns short 00578067
00578062 4A dec edx
00578063 83CA FE or edx, FFFFFFFE
00578066 42 inc edx
00578067 0FBEE8 movsx ebp, al 把运算结果移入EBP寄存器
0057806A 8BC6 mov eax, esi
0057806C 99 cdq
0057806D 75 0F jnz short 0057807E
0057806F 2BC2 sub eax, edx
00578071 8A95 C80DB400 mov dl, byte ptr [ebp+B40DC8]
00578077 D1F8 sar eax, 1
00578079 881418 mov byte ptr [eax+ebx], dl
0057807C EB 11 jmp short 0057808F
0057807E 2BC2 sub eax, edx
00578080 8A95 C80DB400 mov dl, byte ptr [ebp+B40DC8] 此为解密表
00578086 8B6C24 24 mov ebp, dword ptr [esp+24]
0057808A D1F8 sar eax, 1
0057808C 881428 mov byte ptr [eax+ebp], dl 依次取“shr”06 和“shr”02位的值放入
0057808F 83C1 06 add ecx, 6
00578092 83F9 08 cmp ecx, 8
00578095 7C 04 jl short 0057809B
00578097 47 inc edi
00578098 83E9 08 sub ecx, 8
0057809B 46 inc esi
0057809C 83FE 10 cmp esi, 10 比较是否取值完
0057809F ^ 7C B1 jl short 00578052 取完后跳走
005780A1 5F pop edi
005780A2 5E pop esi
005780A3 5D pop ebp
005780A4 5B pop ebx
005780A5 83C4 0C add esp, 0C
005780A8 C3 retn
00578080句中的“byte ptr [ebp+B40DC8]”为解密表,点右键“数据窗口跟随地址”,可看到如下:
00B40DC1 09 00 00 74 09 00 00 30 32 34 36 38 31 33 35 37 024681357
00B40DD1 39 42 41 44 43 46 45 48 47 4A 49 4C 4B 4E 4D 50 9BADCFEHGJILKNMP
00B40DE1 4F 52 51 54 53 56 55 58 57 5A 59
ORQTSVUXWZY
算法总结如下:
假码“12345679—09876543—76543210”
根据指纹码算出的值“1E589295”
Shr 12345679 06 的尾值+B40DC8的值应等于“1”的ASCII码在密码表相对的地址
Shr 65431234 02的尾值+B40DC8的值应等于“E”的ASCII码在密码表相对的地址
Shr 87654312 06的尾值+B40DC8的值应等于“5”的ASCII码在密码表相对的地址
Shr 10098765 02的尾值+B40DC8的值应等于“8”的ASCII码在密码表相对的地址
Shr 32100987 06的尾值+B40DC8的值应等于“9”的ASCII码在密码表相对的地址
Shr76543210 02的尾值+B40DC8的值应等于“2”的ASCII码在密码表相对的地址
Shr E7765432 06的尾值+B40DC8的值应等于“9”的ASCII码在密码表相对的地址
Shr 5781E776 02的尾值+B40DC8的值应等于“5”的ASCII码在密码表相对的地址
相等则注册成功
我的注册码:
用户指纹码:AA87EFCC23AFB5036E7F2AAC2B44AF2F
注册码:FF3F0150-027F1001-1C026005
输入正确的注册码后,没有了注册框,进入程序。
附件为脱壳后的程序,但后面还有登陆网上注册验证,请有兴趣的朋友继续研究,并跟贴!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!