首页
社区
课程
招聘
[原创]某炒股软件的注册算法分析
发表于: 2012-2-12 18:43 12291

[原创]某炒股软件的注册算法分析

2012-2-12 18:43
12291

此炒股软件加了壳(脱壳方法见脱壳区),脱壳后运行此炒股软件,会出现注册框,
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
输入正确的注册码后,没有了注册框,进入程序。
附件为脱壳后的程序,但后面还有登陆网上注册验证,请有兴趣的朋友继续研究,并跟贴!


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
最新回复 (27)
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
怎么会是这么个算法呢?感觉一点头绪都没有。
2012-2-12 20:47
0
雪    币: 717
活跃值: (480)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
3
软件链接地址:http://www.16gt.cn/soft/default.aspx
2012-2-13 11:23
0
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
没能力脱壳。
2012-2-13 14:00
0
雪    币: 717
活跃值: (480)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
5
加壳和脱壳区有我的手脱壳分析
2012-2-13 21:23
0
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
总算给弄明白了,原来这是一篇藏头去尾、避重就轻、模糊不清的算法分析。

2012-2-16 08:42
0
雪    币: 717
活跃值: (480)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
7
只是省略一部分而已
2012-2-18 11:35
0
雪    币: 13657
活跃值: (3997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
附件登录时仍然有注册框,楼主能做个注册机就更好了!期待中!!!
2012-2-18 11:58
0
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9

这软件的注册机不是那好做的。
2012-2-18 13:15
0
雪    币: 13657
活跃值: (3997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
那请教老师怎样去除注册框呢?
2012-2-18 13:39
0
雪    币: 717
活跃值: (480)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
11
在007303EC句可以爆破,去掉注册框
2012-2-18 17:00
0
雪    币: 13657
活跃值: (3997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢老师指导
2012-2-18 17:34
0
雪    币: 13657
活跃值: (3997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
随便输入注册码进入后,再登录出现“注册***失败!$OA请与**投资联系:……”

盼老师指导!谢谢。
2012-2-18 17:52
0
雪    币: 13657
活跃值: (3997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我用C32Asm载入,也未找到字符串“注册码错误,请直接联系**投资”
2012-2-18 18:04
0
雪    币: 717
活跃值: (480)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
15
你是载入未脱壳的吧?
2012-2-19 16:46
0
雪    币: 13657
活跃值: (3997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
载入脱壳后的
2012-2-20 00:10
0
雪    币: 9
活跃值: (142)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
17
第一个是启动KEY,第二层验证才是关键,第一层可以直接跳过
2012-2-20 05:08
0
雪    币: 9
活跃值: (142)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
18
第二层验证的接口地址
http://auth.10jqka.com.cn/verify?reqtype=mainverify&account=111111111&passwd=222222222&product=E02&nopass=1&version=7.75.40.0000&imei=BB29C6B103EF8CCDB5C550EBA0964465
2012-2-20 05:43
0
雪    币: 717
活跃值: (480)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
19
寻找关键CALL
2012-2-20 08:44
0
雪    币: 13657
活跃值: (3997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
老师给个修改好的吧,实在搞不定  
2012-2-21 10:46
0
雪    币: 717
活跃值: (480)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
21
隆重有请不死神鸟
2012-2-21 11:24
0
雪    币: 13657
活跃值: (3997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
期待两位老师提供分享,万分感谢!
2012-2-22 17:45
0
雪    币: 211
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
要分析就分析全么 大家研究下
2012-2-23 08:49
0
雪    币: 717
活跃值: (480)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
24
在奋斗中前进!
2012-2-25 23:36
0
雪    币: 13657
活跃值: (3997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
老师周末愉快!
2012-2-26 00:09
0
游客
登录 | 注册 方可回帖
返回
//