注册亮点压缩实录
by 6767 [BCG] @2001/06
工具:SoftIce, IceDump 6.023, RegMon, FrogIce
下载:http://sd.onlinedown.net/down/nbz20c.exe
受朋友之托,写这个,呵呵。其实机器上有winzip、rar,还有wincommand自带解压,压缩软件在我机器上没有市场。
它加了壳,UPX的,在这个例子中是否脱壳不重要,但有必要给象我一样的初学者讲一下:手动脱UPX的壳很容易。
1、先运行frogice,这个应养成习惯;再运行IceDump 6.023;用Symble Loader载入bzip.exe。差点忘了需要先用PE编辑功能记下它的Size
of Image:1FF000、Image of Base:400000。
程序入口在这里:
017F:005FB370 60
PUSHAD
<- 停在这
017F:005FB371 BE30605600 MOV
ESI,00566030
017F:005FB376 8DBED0AFE9FF LEA
EDI,[ESI+FFE9AFD0]
017F:005FB37C 57
PUSH EDI
017F:005FB37D 83CDFF OR
EBP,-01
017F:005FB380 EB10
JMP 005FB392
017F:005FB382 90
NOP
017F:005FB383 90
NOP
017F:005FB384 90
NOP
017F:005FB385 90
NOP
2、看官们记住了,这就是被UPX压过的特征,脱壳很简单:按Ctrl+PageDown(不要告诉我你找不到)向下翻页,直到这里:
017F:005FB4CE 8903
MOV [EBX],EAX
017F:005FB4D0 83C304 ADD
EBX,04
017F:005FB4D3 EBD8
JMP 005FB4AD
017F:005FB4D5 FF9654DC1F00 CALL
[ESI+001FDC54]
017F:005FB4DB 61
POPAD <-
恢复现场
017F:005FB4DC E91F5BE0FF JMP
00401000 <- 跳向 Original Entry
Point
017F:005FB4E1 0000
ADD [EAX],AL
017F:005FB4E3 00FC
ADD AH,BH
017F:005FB4E5 B45F
MOV AH,5F
017F:005FB4E7 00B0B55F0024 ADD
[EAX+24005FB5],DH
下面是一些 00
3、你只要下:g 5FB4DC,按一次F5,再按一次F10就到了OEP,可以脱壳了。
017F:00401000 EB10
JMP 00401012 <-
这里就是OEP了(不知它为什么还跳,不管它)
017F:00401002 66623A BOUND
DI,[EDX]
017F:00401005 43
INC EBX
017F:00401006 2B2B
SUB EBP,[EBX]
017F:00401008 48
DEC EAX
017F:00401009 4F
DEC EDI
017F:0040100A 4F
DEC EDI
017F:0040100B 4B
DEC EBX
017F:0040100C 90
NOP
4、在401000处下:/dump 400000 1ff000 bz_unpck.exe就能得到脱壳后的文件,不过还不能用。用PE Edit功能打开它,将每一section的psize改为与vsize值相等,offset改为与RVA相等,保存后就可用了(不过这次没法子用WDASM,DAMN!)。
我们是想找出注册码,消灭这个大BUG是吧?继续。
5、用RegMon得知它在这里保存注册信息:
REGEDIT4
[HKEY_CURRENT_USER\Software\NSC\BrilliantZIP\Registered]
"a1"="6767"
"a2"="73E26-3789B-3ABC2-2DCE7"
"a3"="80D2A-43A38-D5D17-A56C4"
"a4"="BCG"
分别为破解者姓名、机器码、注册码、破解组织名。好了,有线索就有办法。
6、下BPX RegQueryValueExA DO "d esp->8" ,然后不停的按F5,直到看到a1出现,继续按F5,看到a3时下bd
*阻断,之后小心的按几次人F12返回程序主线(BORLAND编译器的特征很明显),到这里:
017F:0049CB25 8BC6
MOV EAX,ESI
017F:0049CB27 E898FFFFFF CALL
0049CAC4
017F:0049CB2C 8BD8
MOV EBX,EAX
017F:0049CB2E 85DB
TEST EBX,EBX
017F:0049CB30 7E4F
JLE 0049CB81
017F:0049CB32 8BC7
MOV EAX,EDI
017F:0049CB34 8BCB
MOV ECX,EBX
017F:0049CB36 33D2
XOR EDX,EDX
017F:0049CB38 E8A3C50600 CALL
005090E0
017F:0049CB3D 53
PUSH EBX
再向下不远:
017F:0049CB55 803C2401 CMP
BYTE PTR [ESP],01
017F:0049CB59 7406
JZ 0049CB61
017F:0049CB5B 803C2402 CMP
BYTE PTR [ESP],02
017F:0049CB5F 7517
JNZ 0049CB78
017F:0049CB61 8B07
MOV EAX,[EDI] <-
eax为输入注册码的偏移址
<- 记下这地址并下BPM
017F:0049CB63 E8D4C80600 CALL
0050943C
017F:0049CB68 E867430600 CALL
00500ED4
017F:0049CB6D 8BD0
MOV EDX,EAX
017F:0049CB6F 8BC7
MOV EAX,EDI
017F:0049CB71 E836CA0600 CALL
005095AC
7、设好bpm后,按F5继续运行,第一次中断是取长度的,再按一次F5,到这里:
-----KERNEL32!CompareStringA?---------------------------------------PROT32-
017F:BFFA20F7 8A01
MOV AL,[ECX]
017F:BFFA20F9 648F02 POP
DWORD PTR FS:[EDX]
017F:BFFA20FC 83C404 ADD
ESP,04
017F:BFFA20FF E96485FDFF JMP
BFF7A668
017F:BFFA2104 57
PUSH EDI
017F:BFFA2105 6A23
PUSH 23
017F:BFFA2107 2BD2
SUB EDX,EDX
017F:BFFA2109 68CB21FABF PUSH
BFFA21CB
017F:BFFA210E 64FF32 PUSH
DWORD PTR FS:[EDX]
017F:BFFA2111 648922 MOV
FS:[EDX],ESP
--------------------------------------------------------------------------------
MSR LastBranchFromIp=00536E46
MSR LastBranchToIp=BFFA20E0
:/screendump d:bz07.htm
8、看到那个绿字KERNEL32!CompareStringA了?我是第一次见到这个函数,那么你猜猜它是什么意思呢?按几次F12返回到程序里:
017F:0050032A 8BC3
MOV EAX,EBX
017F:0050032C E80B910000 CALL
0050943C
017F:00500331 50
PUSH EAX <-
这里是大家都想看到的
017F:00500332 6A01
PUSH 01
017F:00500334 6800040000 PUSH
00000400
017F:00500339 E8086B0300 CALL
KERNEL32!CompareStringA
017F:0050033E 83E802 SUB
EAX,02
017F:00500341 5E
POP ESI
017F:00500342 5B
POP EBX
017F:00500343 C3
RET
好了,大侠重新来过吧,载入后进行上述6的跟踪历程,见到目标a3后下bpx 500332 do "d eax",记下数据窗里显示的那些样子怪怪的,再用它来注册就可以了。
收工。
补记:icedump真是好东东,可以截图。想看我截的图just feel free to ask me for it.
- 标 题:注册亮点压缩实录 (6千字)
- 作 者:67
- 时 间:2001-6-12 7:27:17
- 链 接:http://bbs.pediy.com