HexEdit 3.0爆破+部份分析

HexEdit ,这个是旧版的软件,初次运行能在菜单找到一些加密算法了,可能作者的加密知识比较多啦。一开始跟了下,想看看算法,可惜功力不够,CALL有点多,也不知道加密算法,只好爆它吧。

输入注册码,字符串定位到提示,然後找到函数头部,来到这里:

004D69F0   .  6A FF         PUSH    -0x1                                               ;  按钮事件
004D69F2   .  68 08C55000   PUSH    HexEdit.0050C508                                   ;  赴=S; SE 处理程序安装
//........

004D6A10   .  C74424 18 000>MOV     DWORD PTR SS:[ESP+0x18], 0x0
004D6A18   .  E8 D7660200   CALL    <JMP.&MFC42.#CWnd::UpdateData_6334>

调用UPDATEDATA来获得输入框内容。接着:

004D6A1D   .  8B46 64       MOV     EAX, DWORD PTR DS:[ESI+0x64]                       ;  这里应该是判断按下OK按钮
004D6A20   .  85C0          TEST    EAX, EAX
004D6A22   .  0F85 8E000000 JNZ     HexEdit.004D6AB6 //这里会跳走

来到这里,这里有个CALL会算出明码,但是并不是真正的真码:
004D6AB6   > \8B2D 6CF45000 MOV     EBP, DWORD PTR DS:[<&MSVCRT._strnicmp>]            ;  msvcrt._strnicmp
004D6ABC   .  33DB          XOR     EBX, EBX
004D6ABE   >  8B46 60       MOV     EAX, DWORD PTR DS:[ESI+0x60]                       ;  用户名
004D6AC1   .  BF 06000000   MOV     EDI, 0x6
004D6AC6   .  6A 00         PUSH    0x0
004D6AC8   .  53            PUSH    EBX
004D6AC9   .  57            PUSH    EDI
004D6ACA   .  50            PUSH    EAX
004D6ACB   .  8D5424 34     LEA     EDX, DWORD PTR SS:[ESP+0x34]
004D6ACF   .  6A 00         PUSH    0x0
004D6AD1   .  52            PUSH    EDX
004D6AD2   .  E8 F9670000   CALL    HexEdit.004DD2D0                                   ; 可能是部份真码,ASCII "GVK V9P 947 EE3Y"),算码CALL
004D6AD7   .  8B00          MOV     EAX, DWORD PTR DS:[EAX]
004D6AD9   .  8B4E 68       MOV     ECX, DWORD PTR DS:[ESI+0x68]                       ;  假码
004D6ADC   .  6A 0B         PUSH    0xB                                                ;  前11位比较

004D6AE0    C74424 54 00000>MOV     DWORD PTR SS:[ESP+0x54], 0x0
004D6AE8    FFD5            CALL    NEAR EBP                                           ; 调用字串比较stricmp
004D6AEA    83C4 24         ADD     ESP, 0x24
004D6AED    85C0            TEST    EAX, EAX
004D6AEF    74 7E           JE      SHORT HexEdit.004D6B6F                             ; 默认不跳
这里我将JE改成JMP直接跳到下面了,不改应该没什麽影响 

//...................

由於上面的JE跳到这里,所以这个提示不会出现了:

004D6B8E    81FB 00010000   CMP     EBX, 0x100
004D6B94  ^ 0F8C 24FFFFFF   JL      HexEdit.004D6ABE
004D6B9A    EB 08           JMP     SHORT HexEdit.004D6BA4
004D6B9C    81FB 00010000   CMP     EBX, 0x100
004D6BA2    7C 24           JL      SHORT HexEdit.004D6BC8
004D6BA4    6A 00           PUSH    0x0
004D6BA6    6A 00           PUSH    0x0
004D6BA8    68 54F75400     PUSH    HexEdit.0054F754   ; The activation code is incorrect.\nPlease make sure you entered your name\nand/or the activation code correctly.

004D6BC8    8B0D 687B5100   MOV     ECX, DWORD PTR DS:[0x517B68]                       ; 存了用户名长度
004D6BCE    83FF 0E         CMP     EDI, 0xE
004D6BD1    75 4F           JNZ     SHORT HexEdit.004D6C22
由於我输的用户名没有超过14个字符,因此这里是必跳的,接着:

004D6C22    8BC3            MOV     EAX, EBX
004D6C24    49              DEC     ECX
004D6C25    D1F8            SAR     EAX, 1
004D6C27    3BC1            CMP     EAX, ECX
004D6C29    7D 13           JGE     SHORT HexEdit.004D6C3E                             ; 默认没跳
004D6C2B    6A 00           PUSH    0x0
004D6C2D    6A 00           PUSH    0x0
004D6C2F    68 C8F55400     PUSH    HexEdit.0054F5C8                                   ; The activation code is for an older version.\nYou need to upgrade your licence or install the\ncorrect (earlier) licensed version of the software.
这里JGE一定要改为JMP了

接着这些连着用户名和KEY的内容会被加密并写到注册表:

004D6CA6    E8 D54D0000     CALL    HexEdit.004DBA80                                   ; 注册表中写入一些信息
004D6CAB    8B56 60         MOV     EDX, DWORD PTR DS:[ESI+0x60]
004D6CAE    8BCF            MOV     ECX, EDI

虽然注册成功,但是这边关於,还是会得到说授权是前个版本,因此再搜索earlier这个字符串,找到相关的地方:

因此在那些算码CALL里程序启动时并没有调用。

先来看看关於这里:

0045D600    6A FF           PUSH    -0x1                                               ; 关於
0045D602    68 555D5000     PUSH    HexEdit.00505D55
0045D607    64:A1 00000000  MOV     EAX, DWORD PTR FS:[0]
0045D60D    50              PUSH    EAX
0045D60E    64:8925 0000000>MOV     DWORD PTR FS:[0], ESP
0045D615    81EC FC010000   SUB     ESP, 0x1FC
0045D61B    56              PUSH    ESI
0045D61C    8BF1            MOV     ESI, ECX
//.......................


0045D71E    8B86 0C060000   MOV     EAX, DWORD PTR DS:[ESI+0x60C]
0045D724    83F8 01         CMP     EAX, 0x1
0045D727    75 0A           JNZ     SHORT HexEdit.0045D733
0045D729    68 A4635400     PUSH    HexEdit.005463A4                                   ; Your trial period has expired. Click the link below to register.
0045D72E    E9 8F000000     JMP     HexEdit.0045D7C2
0045D733    83F8 02         CMP     EAX, 0x2
0045D736    75 1E           JNZ     SHORT HexEdit.0045D756
0045D738    8B96 10060000   MOV     EDX, DWORD PTR DS:[ESI+0x610]
0045D73E    8D8424 00020000 LEA     EAX, DWORD PTR SS:[ESP+0x200]
0045D745    52              PUSH    EDX
0045D746    68 60635400     PUSH    HexEdit.00546360                                   ; Your trial expires in %ld days. Click the link below to register.
0045D74B    50              PUSH    EAX
0045D74C    E8 A9F90900     CALL    <JMP.&MFC42.#CString::Format_2818>
0045D751    83C4 0C         ADD     ESP, 0xC
0045D754    EB 78           JMP     SHORT HexEdit.0045D7CE
0045D756    83F8 03         CMP     EAX, 0x3
0045D759    75 07           JNZ     SHORT HexEdit.0045D762
0045D75B    68 28635400     PUSH    HexEdit.00546328                                   ; Temporary licence. Click the link below to register.
0045D760    EB 60           JMP     SHORT HexEdit.0045D7C2
0045D762    83F8 04         CMP     EAX, 0x4
0045D765    75 17           JNZ     SHORT HexEdit.0045D77E
0045D767    8D8C24 00020000 LEA     ECX, DWORD PTR SS:[ESP+0x200]
0045D76E    68 E4625400     PUSH    HexEdit.005462E4                                   ; Your licence is for an earlier version. Click the link to register.
0045D773    51              PUSH    ECX
0045D774    E8 81F90900     CALL    <JMP.&MFC42.#CString::Format_2818>
0045D779    83C4 08         ADD     ESP, 0x8
0045D77C    EB 50           JMP     SHORT HexEdit.0045D7CE
0045D77E    83F8 05         CMP     EAX, 0x5
0045D781    75 17           JNZ     SHORT HexEdit.0045D79A
0045D783    8D9424 00020000 LEA     EDX, DWORD PTR SS:[ESP+0x200]
0045D78A    68 A0625400     PUSH    HexEdit.005462A0                                   ; Your licence is for an earlier version. Click the link to upgrade.
0045D78F    52              PUSH    EDX
0045D790    E8 65F90900     CALL    <JMP.&MFC42.#CString::Format_2818>
0045D795    83C4 08         ADD     ESP, 0x8
0045D798    EB 34           JMP     SHORT HexEdit.0045D7CE
0045D79A    83F8 06         CMP     EAX, 0x6
0045D79D    75 1E           JNZ     SHORT HexEdit.0045D7BD
0045D79F    8B86 14060000   MOV     EAX, DWORD PTR DS:[ESI+0x614]
0045D7A5    8D8C24 00020000 LEA     ECX, DWORD PTR SS:[ESP+0x200]
0045D7AC    50              PUSH    EAX
0045D7AD    68 84625400     PUSH    HexEdit.00546284                                   ; Registered for use by: %s.
0045D7B2    51              PUSH    ECX
0045D7B3    E8 42F90900     CALL    <JMP.&MFC42.#CString::Format_2818>
0045D7B8    83C4 0C         ADD     ESP, 0xC
0045D7BB    EB 11           JMP     SHORT HexEdit.0045D7CE
0045D7BD    68 4C625400     PUSH    HexEdit.0054624C                                   ; Unregistered copy.   Click the link below to register.

看到这里的提示就很明显了,读取[esi+60c]这里的一个值,通过这个值来判断版本,通过分析,为6的才是已注册的版本.

再往上找,0045D6B2    83BE 0C060000 0>CMP     DWORD PTR DS:[ESI+0x60C], 0x3                      ; 这里是证书类型
0045D6B9    7E 63           JLE     SHORT HexEdit.0045D71E
0045D6BB    83BE 18060000 0>CMP     DWORD PTR DS:[ESI+0x618], 0x2
0045D6C2    7E 5A           JLE     SHORT HexEdit.0045D71E
判断由上面开始,於是找到这个地址00550A44

这里下一个硬件写入断点,看什麽时候重启程序时写入的,於是ctrl+f2,F9,断在:

00454E17    E8 C4720800     CALL    HexEdit.004DC0E0                                   ; 从注册表里读出KEY计算并返回版本号
00454E1C    83F8 06         CMP     EAX, 0x6

这里是关建了,进CALL 004dc0e0看看:


关键的地方:
004DC529   /7D 0C           JGE     SHORT HexEdit.004DC537
004DC52B   |C785 0C060000 0>MOV     DWORD PTR SS:[EBP+0x60C], 0x4                      ; 写入版本号

这里会将版本号赋4,即未注册或不合法的,这里将上面一句JGE 用NOP填充,然後改

004DC52B 改成MOV [EBP+60C],6,保存所有修改,成功爆了。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值