欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

一款宝宝取名软件爆破分析

程序员文章站 2022-04-03 11:48:43
前言:在赏金上接个 50RMB 的单子,搞定了,结果发单人现在还不理我,算了, 不在乎这点钱,共享之。。。 -------------------------------...
前言:在赏金上接个 50RMB 的单子,搞定了,结果发单人现在还不理我,算了, 不在乎这点钱,共享之。。。

-----------------------------------------------------------------------------------------------
 
1.   PEID 检测 检测结果:ASPack 2.12 脱壳工具脱掉,不赘述。
2.   初试 机器码+注册码类型,随便输入假码,弹出对话框。OK,从对话框下手。
  

一款宝宝取名软件爆破分析
 

3.   抄 OD,搞起
1)    OD 载入,bp MessageBoxA; bp MessageBoxW
2)    F9 运行,输入假码,程序断下,ctrl+F9,回到程序领空,如下:
 
 
004FDEB3 . 56 PUSH ESI  
……    
004FDF48 . 8D0470 LEA EAX,DWORD PTR DS:[EAX+ESI*2]
004FDF4B . 50 PUSH EAX ; /Style
004FDF4C . 52 PUSH EDX ; |Title
004FDF4D . 51 PUSH ECX ; |Text

 

004FDF4E . 6A 00 PUSH 0x0                                                                 ; |hOwner = NU
004FDF50 . FF15 A4445D00 CALL DWORD PTR DS:[<&user32.MessageBoxA>>;\MessageBoxA
……    
004FDF6B . C3 RETN
LL
 
 
 
 
 
 
3)    找到此处子函数,分析各个跳转语句,发现 MessageBox 始终被调用, 继续 Ctrl+F9 返回上一级函数。如下:
 
 
00520A5F . FFD3 CALL EBX
00520A61 . 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+0xC]
00520A65 . 8B5424 10 MOV EDX,DWORD PTR SS:[ESP+0x10]
00520A69 . 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+0x14]
00520A6D . 83C4 18 ADD ESP,0x18
00520A70 . C3 RETN
 
4)    断下这里,F9 跑起,发现每一次点击注册,该子函数都会被执行多次, 无奈,继续返回上一级函数。如下:
 
 
 

004CE0A7
004CE0A9
. 6A 00
. 68 EA217500
PUSH 0x0
PUSH  软件_WSD.007521EA
"    
004CE0AE
004CE0B3
004CE0B8
. 68 03000000
. BB B0DE4F00
. E8 2FC80200
PUSH 0x3
MOV EBX,软件_WSD.004FDEB0
CALL  软件_WSD.004FA8EC
004CE0BD . 83C4 28 ADD ESP,0x28
;    ASCII "册失败
 
 
 
 
 
 
 
 
 
5)    运气不错,遇到注册提示信息,继续往上翻,发现在这个子函数里面果 真有两处注册成功的提示。如下:
  
;    ASCII "注册"
 
 
;    ASCII  "恭喜,
 
 

004CDEE6
004CDEE8
. 6A 00
. 68 0F935D00
PUSH 0x0
PUSH  软件_WSD.005D930F
004CDEED . 6A FF PUSH -0x1
004CDEEF . 6A 0A PUSH 0xA
004CDEF1 . 68 72670116 PUSH 0x16016772
004CDEF6
004CDEFB
. 68 4C670152
. E8 F2C90200
PUSH 0x5201674C
CALL  软件_WSD.004FA8F2
004CDF00 . 83C4 18 ADD ESP,0x18
004CDF03 . 6A 00 PUSH 0x0
004CDF05
注册!"
.  68  B4217500 PUSH  软件_WSD.007521B4
004CDF0A      . 6A FF                   PUSH -0x1
 
 
 
 
004CE007      . 68 04000080        PUSH 0x80000004

004CE00C      . 6A 00                    PUSH 0x0
004CE00E      .  68  C1217500        PUSH  软件_WSD.007521C1                                         ;    ASCII  "恭喜,注 册成功,您现在需要重打开软件!"
004CE013      . 68 03000000        PUSH 0x3
 
6)    定位关键跳。往上翻,不远就找到了,如下:
004CDEB7                  . E9 04020000                        JMP  软件_WSD.004CE0C0
004CDEBC      > E8 D537F3FF       CALL  软件_WSD.00401696
004CDEC1      . 85C0                      TEST EAX,EAX
004CDEC3      . 0F84 70010000    JE  软件_WSD.004CE039
 
 
7)    在关键跳处下端,重新载入,程序跑到这里,直接改掉 eax 值,F9 继续 跑起。期待着弹出注册成功界面,无奈程序直接挂掉:
 
一款宝宝取名软件爆破分析
8)    继续上次操作,改 F9 跑起为 F8 单步,继续跑起,一切正常,直至运行 到一个 call 语句,如下:
004CDF56      . 50                          PUSH EAX
004CDF57      . 3BC8                      CMP ECX,EAX
004CDF59      . 0F8F 0B000000    JG  软件_WSD.004CDF6A
004CDF5F      . C745 FC 010000>MOV DWORD PTR SS:[EBP-0x4],0x1
004CDF66      . 58                          POP EAX
004CDF67      . 59                          POP ECX
004CDF68      .^EB EA                    JMP SHORT  软件_WSD.004CDF54
004CDF6A      > 83C4 08                ADD ESP,0x8
004CDF6D     . 837D FC 00          CMP DWORD PTR SS:[EBP-0x4],0x0
004CDF71      . 0F85 0A000000    JNZ  软件_WSD.004CDF81
一款宝宝取名软件爆破分析004CDF77      . E8 BCBBFAFF       CALL  软件_WSD.00479B38
004CDF7C      . E9 3F010000        JMP  软件_WSD.004CE0C0
004CDF81      > 833D C452B800 >CMP DWORD PTR DS:[0xB852C4],0x0
004CDF88      . 0F85 61000000    JNZ  软件_WSD.004CDFEF
 
 
9)    执行该语句,程序直接死掉,目测改语句就是反修改函数,这里先不管, 执行该语句前有一个判断,直接 JMP 掉,重新 F8 再试,该 call 语句之 后的 JNZ 条件跳转实现,如下:
004CDFEF      > 68 04000080        PUSH 0x80000004


 
 
 
 
 
 
 
 
 
 
 
 

004CDFF4
004CDFF6
. 6A 00
. 68 F10E5E00
PUSH 0x0
PUSH  软件_WSD.005E0EF1
004CDFFB . 68 01030080 PUSH 0x80000301
004CE000 . 6A 00 PUSH 0x0
004CE002 . 68 40000000 PUSH 0x40
004CE007 . 68 04000080 PUSH 0x80000004
004CE00C
004CE00E
. 6A 00
.  68  C1217500
PUSH 0x0
PUSH  软件_WSD.007521C1
册成功,您现在需要重打开软件!"
004CE013
004CE018
. 68 03000000
. BB B0DE4F00
PUSH 0x3
MOV EBX,软件_WSD.004FDEB0
004CE01D . E8 CAC80200 CALL  软件_WSD.004FA8EC
;    ASCII  "恭喜,
 
 
 
 
 
 
 
 
10) 此 时 有 木 有 发 现  CALL  软件 _WSD.004FA8EC  调用的 目的 地 址 就 是 MessageBox 弹框的上一级函数啊。好了,到这里,已经能够弹出成功注 册的框框了:
 
一款宝宝取名软件爆破分析
11) 点击  OK,重启软件,发现仍旧没什么改变,仍然需要注册,看来每次 软件启动都会进行检验。那好,从验证函数入手,回到之前找到的关键 跳,验证函数就在之上,进入验证函数,发现很多地方都调用了,如下:
 
一款宝宝取名软件爆破分析
 
12) 如此多的调用,一个个改肯定不好,反正程序最后返回的 EAX 才是判断 关键,改掉 EAX 就行。找到 retn 之前 EAX 赋值的地方,如下:
00401736    |. E8 950B0000                                  CALL  软件_WSD.004022D0
一款宝宝取名软件爆破分析0040173B    |. 8945 EC               MOV DWORD PTR SS:[EBP-0x14],EAX

 

0040173E
00401741
|. 8B5D F0
|. 85DB
MOV EBX,DWORD PTR SS:[EBP-0x10]
TEST EBX,EBX
00401743 |. 74 09 JE SHORT  软件_WSD.0040174E
00401745 |. 53 PUSH EBX
00401746 |. E8 95910F00 CALL  软件_WSD.004FA8E0
0040174B |. 83C4 04 ADD ESP,0x4
0040174E |> 8B45 EC MOV EAX,DWORD PTR SS:[EBP-0x14]
00401751 |. E9 00000000 JMP  软件_WSD.00401756
00401756 |> 8BE5 MOV ESP,EBP
00401758 |. 5D POP EBP
00401759 \. C3 RETN
 
13) 虽然不知道那几个 call 函数做了什么,但是代码很好懂,不管什么,直 接把
一款宝宝取名软件爆破分析0040174E    |> 8B45 EC               MOV EAX,DWORD PTR SS:[EBP-0x14]
改成
MOV EAX,0x1
14仅改此一句,保存为 exe,双击执行,ok,显示为已注册
 
一款宝宝取名软件爆破分析
15) 继续测试,发现问题,点击如下几处仍会和之前一样发生程序错误,看 来在这些按钮对应的功能之前都存在软件注册检验的函数,之后执行反 修改函数:

一款宝宝取名软件爆破分析

Ø 00439D5D |. E8 D6FD0300 CALL  软件_WSD.00479B38  
Ø 00479BD9 |. E8 0E0D0800 CALL  软件_WSD.004FA8EC
Ø 004FA8EC $ FF25 A8915D00 JMP DWORD PTR DS:[0x5D91A8] ;    软件_WSD.00520A40
Ø 00520A5F . FFD3 CALL EBX ;    软件_WSD.004FF1D0
16) 定位反修改函数。首先对判断函数进行断点设置,之后单步跟踪,发现 程序最后执行错误的语句流程及具体失败语句如下(以点击生辰八字按 钮为例):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

一款宝宝取名软件爆破分析
 

Ø
17该反修改函数的原理也懒得弄了,总之跳过这段执行程序异常代码就行,
改掉,保存为可执行文件,运行,如下,终于搞定。

一款宝宝取名软件爆破分析