找回密码
 注册
搜索
热搜: 回贴

脱壳技术

2010-1-12 20:27| 发布者: admin| 查看: 227| 评论: 0|原作者: 千年缘

【脱文标题】 ASProtect 1.2 之 FixVideo V2.11 脱壳 去暗桩

【脱文作者】 weiyi75[Dfcg]

【作者邮箱】 weiyi75@sohu.com

【作者主页】 Dfcg官方大本营

【使用工具】 Peid,Ollydbg1.10b,ImportREC1.42,Loadpe,W32dasm

【脱壳平台】 Win2000/XP



【软件名称】 Divx Avi Asf Wmv Wma Rm Rmvb 修复器 2.11

【下载地址】 本地下载

【软件简介】 只需轻松的一次点击就可以修复不能拖动的或者不能播放的divx avi asf wmv wma rm rmvb文件。Divx Avi Asf Wmv Wma Rm Rmvb 修复器可以修复你通过http,ftp,mms,rtsp方式由于某些原因没有下载完全的divx avi asf wmv wma rm rmvb文件。修复后的文件可以流畅的播放,自由的拖动。Divx Avi Asf Wmv Wma Rm Rmvb 修复器也可以修复在播放过程中不能拖动的divx avi asf wmv wma rm rmvb文件。修复后的文件可以随意的拖动。Divx Avi Asf Wmv Wma Rm Rmvb 修复器还有另一个功能,他可以强行修复部分损坏的divx avi asf wmv wma rm rmvb文件。修复后的文件可以跳过坏的数据块,继续播放。如果一些播放器,例如Mediaplayer,realplayer提示dvix avi asf wmv wma rm rmvb文件不能播放或文件损坏,都可以尝试用Divx Avi Asf Wmv Wma Rm Rmvb 修复器来修复。用Divx Avi Asf Wmv Wma Rm Rmvb 修复器修复后的文件可以让一些多媒体编辑软件例如VirtualDub,RealProducer Plus进行进一步的操作,例如合并,分割,格式转换等。Divx Avi Asf Wmv Wma Rm Rmvb 修复器修得的成功率达到了 80%-90%。

【软件大小】 985K

【加壳方式】 ASProtect 1.2 / 1.2c-> Alexey Solodovnikov

【保护方式】 10天试用期限制,延时NAG注册提示,时间越久NAG延迟进入时间越长。



ASProtect 1.2 SDK防脱壳暗桩 加自定义CRC脱壳校验。

【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:

--------------------------------------------------------------------------------

【脱壳内容】

很久以前的软件,今天写脱文时已经过期,于是用stripper 2.07 脱壳,并不期待它的脱壳,而在于它脱壳时有个选项可以清除Asprotect 的过期注册表暗桩,当然手动用Regmon也可以找出暗桩不过没有它快。

运行程序,看到NAG画面,延时几秒才能点关闭按钮进入主程序,第一次等待0秒就可以了。不知你注意没有,这个NAG画面不是Asprotect内置的NAG保护画面,这意味着脱壳后如果没有注册码,这个画面仍然是存在的,还很有可能是过期让你无法使用,先有个印象吧。

下面分脱壳修复,去暗桩,爆破三个方面讲。

1,手动脱壳修复IAT

Ollydbg载入程序,无须隐藏OD,因为Asprotect1.2根本不检测OD,只对付Softice,Trw2000等,OD异常设置忽略除内存异常外的全部异常。

00401000 > 68 01905D00 PUSH fixvideo.005D9001 //外壳入口,F9运行。

00401005 C3 RETN

00401006 AA STOS BYTE PTR ES:[EDI]

00401007 802B C6 SUB BYTE PTR DS:[EBX],0C6

0040100A BA 7B24D486 MOV EDX,86D4247B

0040100F 835A 81 21 SBB DWORD PTR DS:[EDX-7F],21

00401013 2010 AND BYTE PTR DS:[EAX],DL

00401015 8452 00 TEST BYTE PTR DS:[EDX],DL

00401018 C602 48 MOV BYTE PTR DS:[EDX],48

0040101B 41 INC ECX

0040101C 42 INC EDX

0040101D 1A22 SBB AH,BYTE PTR DS:[EDX]

0040101F 68 92108744 PUSH 44871092

...................................................

内存异常。

00F1009D 3100 XOR DWORD PTR DS:[EAX],EAX

00F1009F EB 01 JMP SHORT 00F100A2

00F100A1 68 648F0500 PUSH 58F64

00F100A6 0000 ADD BYTE PTR DS:[EAX],AL

00F100A8 00EB ADD BL,CH

00F100AA 02E8 ADD CH,AL

00F100AC 0158 68 ADD DWORD PTR DS:[EAX 68],EBX

00F100AF B0 DF MOV AL,0DF

00F100B1 F0:0068 94 LOCK ADD BYTE PTR DS:[EAX-6C],CH ; LOCK 前缀

00F100B5 01F1 ADD ECX,ESI

00F100B7 0068 D0 ADD BYTE PTR DS:[EAX-30],CH

00F100BA F8 CLC

00F100BB F0:0068 78 LOCK ADD BYTE PTR DS:[EAX 78],CH ; LOCK 前缀

00F100BF F5 CMC

00F100C0 F0:0068 3C LOCK ADD BYTE PTR DS:[EAX 3C],CH ; LOCK 前缀

...................................................

继续Shift F9 16次

00F10260 3100 XOR DWORD PTR DS:[EAX],EAX

00F10262 EB 01 JMP SHORT 00F10265

00F10264 68 648F0500 PUSH 58F64

00F10269 0000 ADD BYTE PTR DS:[EAX],AL

00F1026B 00EB ADD BL,CH

00F1026D 02E8 ADD CH,AL

00F1026F 0158 B2 ADD DWORD PTR DS:[EAX-4E],EBX

00F10272 01B8 24C9F000 ADD DWORD PTR DS:[EAX F0C924],EDI

00F10278 E8 B7C6FFFF CALL 00F0C934

00F1027D 8BF0 MOV ESI,EAX

00F1027F A1 F838F100 MOV EAX,DWORD PTR DS:[F138F8]

00F10284 8946 04 MOV DWORD PTR DS:[ESI 4],EAX

00F10287 66:8B15 5422F10>MOV DX,WORD PTR DS:[F12254]

00F1028E 8BC6 MOV EAX,ESI

00F10290 E8 FFC6FFFF CALL 00F0C994

00F10295 8BD8 MOV EBX,EAX

00F10297 85DB TEST EBX,EBX

00F10299 74 0B JE SHORT 00F102A6

......................................................

在堆栈中看到

0012D748 0012FF90

0012D74C 00F00000

0012D750 00EE0000

0012D754 00F10038

0012D758 00000000

0012D75C 00F26B28 ASCII "t 9adACADug="

Alt M 打开内存镜像

内存镜像, 项目 12

地址=00401000 //对401000 Code段下内存访问断点

大小=00124000 (1196032.)

Owner=fixvideo 00400000

Section=

Contains=code

类型=Imag 01001002

访问=R

初始访问=RWE

Shift F9运行

00524290 55 PUSH EBP

00524291 8BEC MOV EBP,ESP

00524293 8B45 08 MOV EAX,DWORD PTR SS:[EBP 8]

00524296 A3 F4AD5200 MOV DWORD PTR DS:[52ADF4],EAX

0052429B 5D POP EBP

0052429C C2 0400 RETN 4

不断的Shift F9 内存中断。

0051D3A0 55 PUSH EBP

0051D3A1 8BEC MOV EBP,ESP

0051D3A3 8B45 08 MOV EAX,DWORD PTR SS:[EBP 8]

0051D3A6 A3 A45E5300 MOV DWORD PTR DS:[535EA4],EAX

0051D3AB 5D POP EBP

0051D3AC C2 0400 RETN 4

0051E5FC 55 PUSH EBP

0051E5FD 8BEC MOV EBP,ESP

0051E5FF 8B45 08 MOV EAX,DWORD PTR SS:[EBP 8]

0051E602 A3 80AD5200 MOV DWORD PTR DS:[52AD80],EAX //EAX=0A=10天试用期

0051E607 8B45 0C MOV EAX,DWORD PTR SS:[EBP C]

0051E60A A3 84AD5200 MOV DWORD PTR DS:[52AD84],EAX //EAX=0A=10天剩余日期

0051E60F 5D POP EBP

0051E610 C2 0800 RETN 8

0051E5EC 55 PUSH EBP

0051E5ED 8BEC MOV EBP,ESP

0051E5EF 8B45 08 MOV EAX,DWORD PTR SS:[EBP 8]

0051E5F2 A3 7CAD5200 MOV DWORD PTR DS:[52AD7C],EAX //52AD7C当然存放注册用户名的地址

0051E5F7 5D POP EBP

0051E5F8 C2 0400 RETN 4

于是命令行

dd 52AD7C

0052AD7C 0051E5E8 fixvideo.0051E5E8 //存放注册用户地址

0052AD80 0000000A //试用期时间地址

0052AD84 0000000A //剩余时间地址

现在可以动写手脚写入用户信息,脱壳时就可以一块脱出来。

将转存显示改为HEX 8字节显示。

在尾部找个空地址写入注册用户信息。

我选的 52BFD8 用二进制编辑写入 Mr.David

然后还是

dd 52ad7c

右键修改

0051E5E8 为 52BFD8

狸猫换太子

继续Shift F9

一直执行到地球人都知道的位置。

00524748 55 PUSH EBP //LoadPe脱壳

00524749 8BEC MOV EBP,ESP

0052474B 83C4 F0 ADD ESP,-10

0052474E B8 C8425200 MOV EAX,fixvideo.005242C8

00524753 E8 A42AEEFF CALL fixvideo.004071FC

00524758 A1 B4B15200 MOV EAX,DWORD PTR DS:[52B1B4]

0052475D 8B00 MOV EAX,DWORD PTR DS:[EAX]

0052475F E8 3844F4FF CALL fixvideo.00468B9C

00524764 FF15 F4AD5200 CALL DWORD PTR DS:[52ADF4]

0052476A A1 B4B15200 MOV EAX,DWORD PTR DS:[52B1B4]

0052476F 8B00 MOV EAX,DWORD PTR DS:[EAX]

00524771 E8 BE44F4FF CALL fixvideo.00468C34

00524776 E8 7901EEFF CALL fixvideo.004048F4

........................................................

然后用ImportREC1.42用跟踪等级1和Asprotect1.2X插件轻松修复,无法运行。

2,去除暗桩

载入脱壳程序

00524748 > $Content$nbsp; 55 PUSH EBP

00524749 . 8BEC MOV EBP,ESP

0052474B . 83C4 F0 ADD ESP,-10

0052474E . B8 C8425200 MOV EAX,dumped_.005242C8

00524753 . E8 A42AEEFF CALL dumped_.004071FC

00524758 . A1 B4B15200 MOV EAX,DWORD PTR DS:[52B1B4]

0052475D . 8B00 MOV EAX,DWORD PTR DS:[EAX]

0052475F . E8 3844F4FF CALL dumped_.00468B9C

00524764 . FF15 F4AD5200 CALL DWORD PTR DS:[52ADF4] //52ADF4指向壳中

................................................................

于是跟踪原程序。

00F0C784 833D A835F100 0>CMP DWORD PTR DS:[F135A8],0

00F0C78B 74 06 JE SHORT 00F0C793

00F0C78D FF15 A835F100 CALL DWORD PTR DS:[F135A8] ; fixvideo.005241EC //转向到005241EC

00F0C793 C3 RETN

这个简单,于是

命令行

dd 52ADF4

右键修改 00F0C784 为 005241EC

复制到程序中,保存覆盖脱壳文件。

Ctrl F2 重启Od,继续查找暗桩。

F9运行脱壳修复程序,提示程序已经运行,什么也没有看见啊,再等等,还是没有,超时,原来进入了死循环。

于是我们要唤醒Od,F12暂停在系统领空。

77F8FC11 5F POP EDI ; dumped_.0051DFBC

77F8FC12 5E POP ESI

77F8FC13 C9 LEAVE

77F8FC14 C2 0C00 RETN 0C

不断Ctrl F9 一直返回到程序领空。

00402B1E |. E8 65E7FFFF CALL ; \GetSystemTime

00402B23 |. 0FB745 F0 MOVZX EAX,WORD PTR SS:[EBP-10] //停在这里,F8慢慢步过了解一下循环圈的结构。

00402B27 |. 6BC0 3C IMUL EAX,EAX,3C

00402B2A |. 66:0345 F2 ADD AX,WORD PTR SS:[EBP-E]

00402B2E |. 6BC0 3C IMUL EAX,EAX,3C

00402B31 |. 31D2 XOR EDX,EDX

00402B33 |. 66:8B55 F4 MOV DX,WORD PTR SS:[EBP-C]

00402B37 |. 01D0 ADD EAX,EDX

00402B39 |. 69C0 E8030000 IMUL EAX,EAX,3E8

00402B3F |. 66:8B55 F6 MOV DX,WORD PTR SS:[EBP-A]

00402B43 |. 01D0 ADD EAX,EDX

00402B45 |. A3 08505200 MOV DWORD PTR DS:[525008],EAX

00402B4A |. 8BE5 MOV ESP,EBP

00402B4C |. 5D POP EBP

00402B4D \. C3 RETN //这里都没有问题,返回。

....................................................................

下面就是一个大的循环圈,我选择两处RETN之间的代码分析流程,不会出错,打开OD的跳转路线功能。

我当前路径在0051F102

0051EFF1 . C3 RETN

0051EFF2 8BC0 MOV EAX,EAX

0051EFF4 . 55 PUSH EBP

0051EFF5 . 8BEC MOV EBP,ESP

0051EFF7 . 6A 00 PUSH 0

0051EFF9 . 6A 00 PUSH 0

0051EFFB . 6A 00 PUSH 0

0051EFFD . 53 PUSH EBX

0051EFFE . 56 PUSH ESI

0051EFFF . 8BF0 MOV ESI,EAX

0051F001 . 33C0 XOR EAX,EAX

0051F003 . 55 PUSH EBP

0051F004 . 68 48F15100 PUSH dumped_.0051F148

0051F009 . 64:FF30 PUSH DWORD PTR FS:[EAX]

0051F00C . 64:8920 MOV DWORD PTR FS:[EAX],ESP

0051F00F > C686 90030000>MOV BYTE PTR DS:[ESI 390],1 //第三层循环

0051F016 . C686 91030000>MOV BYTE PTR DS:[ESI 391],0

0051F01D . B2 01 MOV DL,1

0051F01F . A1 30E04600 MOV EAX,DWORD PTR DS:[46E030]

0051F024 . E8 07F1F4FF CALL dumped_.0046E130

0051F029 . 8BD8 MOV EBX,EAX

0051F02B . BA 01000080 MOV EDX,80000001

0051F030 . 8BC3 MOV EAX,EBX

0051F032 . E8 99F1F4FF CALL dumped_.0046E1D0

0051F037 . 33C9 XOR ECX,ECX

0051F039 . BA 60F15100 MOV EDX,dumped_.0051F160 ; ASCII "\Software\cnghost\fixer\"

0051F03E . 8BC3 MOV EAX,EBX

0051F040 . E8 EFF1F4FF CALL dumped_.0046E234

0051F045 . 84C0 TEST AL,AL

0051F047 . 74 16 JE SHORT dumped_.0051F05F

0051F049 . 8D4D FC LEA ECX,DWORD PTR SS:[EBP-4]

0051F04C . BA 84F15100 MOV EDX,dumped_.0051F184 ; ASCII "Times"

0051F051 . 8BC3 MOV EAX,EBX

0051F053 . E8 A4F3F4FF CALL dumped_.0046E3FC

0051F058 . 8BC3 MOV EAX,EBX

0051F05A . E8 41F1F4FF CALL dumped_.0046E1A0

0051F05F > 8BC3 MOV EAX,EBX

0051F061 . E8 F64BEEFF CALL dumped_.00403C5C

0051F066 . 56 PUSH ESI

0051F067 . 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]

0051F06A . 33C0 XOR EAX,EAX

0051F06C . E8 3F3AEEFF CALL dumped_.00402AB0

0051F071 . 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]

0051F074 . 8D4D F8 LEA ECX,DWORD PTR SS:[EBP-8]

0051F077 . A1 B85E5300 MOV EAX,DWORD PTR DS:[535EB8]

0051F07C . E8 AF3FFAFF CALL dumped_.004C3030

0051F081 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]

0051F084 . 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]

0051F087 . E8 F85DEEFF CALL dumped_.00404E84

0051F08C . 0F84 9B000000 JE dumped_.0051F12D //呵呵,这里就是Magic Jmp,当然它是用永不会跳转的,如果这里不跳转,往下继续三层死循环。当然山人自有对策

0051F08C . 0F84 9B000000 JE dumped_.0051F12D

直接Od修改语句

0051F08C /E9 9C000000 JMP dumped_.0051F12D

0051F091 |90 NOP

复制所有修改到程序中,覆盖原先的文件,成功去除暗桩,转标签1

0051F092 > E8 7D3AEEFF CALL dumped_.00402B14 ; Cases 1,2 of switch 0051F0C5

0051F097 . B8 10270000 MOV EAX,2710

0051F09C . E8 3F42EEFF CALL dumped_.004032E0

0051F0A1 . 8BC8 MOV ECX,EAX

0051F0A3 . 8BC1 MOV EAX,ECX

0051F0A5 . B9 0A000000 MOV ECX,0A

0051F0AA . 99 CDQ

0051F0AB . F7F9 IDIV ECX

0051F0AD . 8BCA MOV ECX,EDX

0051F0AF . 83F9 02 CMP ECX,2

0051F0B2 . 74 36 JE SHORT dumped_.0051F0EA

0051F0B4 .^ EB DC JMP SHORT dumped_.0051F092

0051F0B6 > E8 593AEEFF CALL dumped_.00402B14 //第二层中循环。

0051F0BB . B8 05000000 MOV EAX,5

0051F0C0 . E8 1B42EEFF CALL dumped_.004032E0

0051F0C5 . 83F8 04 CMP EAX,4 ; Switch (cases 0..3)

0051F0C8 . 77 20 JA SHORT dumped_.0051F0EA

0051F0CA . FF2485 D1F051>JMP DWORD PTR DS:[EAX*4 51F0D1] //这里又向上和51F00F产生第三层循环

0051F0D1 . 0FF05100 DD dumped_.0051F00F ; Switch table used at 0051F0CA

0051F0D5 . 92F05100 DD dumped_.0051F092

0051F0D9 . 92F05100 DD dumped_.0051F092

0051F0DD . B6F05100 DD dumped_.0051F0B6

0051F0E1 . EAF05100 DD dumped_.0051F0EA

0051F0E5 .^ E9 25FFFFFF JMP dumped_.0051F00F

0051F0EA > E8 253AEEFF CALL dumped_.00402B14 //小循环。

0051F0EF . B8 A0860100 MOV EAX,186A0

0051F0F4 . E8 E741EEFF CALL dumped_.004032E0

0051F0F9 . B9 0A000000 MOV ECX,0A

0051F0FE . 99 CDQ

0051F0FF . F7F9 IDIV ECX

0051F101 . 4A DEC EDX

0051F102 .^ 75 E6 JNZ SHORT dumped_.0051F0EA //我现在位置在这个小循环里。

0051F104 . B8 A8610000 MOV EAX,61A8 // F4直接下来。

0051F109 . E8 D241EEFF CALL dumped_.004032E0

0051F10E . 3D 29090000 CMP EAX,929

0051F113 .^ 75 A1 JNZ SHORT dumped_.0051F0B6 //中循环,第二层,向上跳。

0051F115 . B8 94F15100 MOV EAX,dumped_.0051F194 //当我们试图F4下来,但无法下来,仍然进入死循环,这里并不是循环出口。重新F12暂停程序,Ctrl G 0051F113,F4回到0051F113 ,往上跳转看看流程。

0051F11A . E8 0D1DF2FF CALL dumped_.00440E2C

0051F11F . A1 B4B15200 MOV EAX,DWORD PTR DS:[52B1B4]

0051F124 . 8B00 MOV EAX,DWORD PTR DS:[EAX]

0051F126 . E8 F59BF4FF CALL dumped_.00468D20

0051F12B .^ EB 89 JMP SHORT dumped_.0051F0B6

0051F12D > 33C0 XOR EAX,EAX

0051F12F . 5A POP EDX

0051F130 . 59 POP ECX

0051F131 . 59 POP ECX

0051F132 . 64:8910 MOV DWORD PTR FS:[EAX],EDX

0051F135 . 68 4FF15100 PUSH dumped_.0051F14F

0051F13A > 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]

0051F13D . BA 03000000 MOV EDX,3

0051F142 . E8 6559EEFF CALL dumped_.00404AAC

0051F147 . C3 RETN

...............................................................

标签1

再次Ctrl F2 重启动程序,F9运行。

呵呵,出来了,请不要破解本公司的软件,然后弹出过期画面,关闭退出。

3, 强力爆破程序。

动态跟踪实在不好复制代码,太多了,改用W32Dasm 静态分析。

:0051F12D 33C0 xor eax, eax //Magic Jmp 出口点。

:0051F12F 5A pop edx

:0051F130 59 pop ecx

:0051F131 59 pop ecx

:0051F132 648910 mov dword ptr fs:[eax], edx

:0051F135 684FF15100 push 0051F14F

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0051F14D(U)

|

:0051F13A 8D45F4 lea eax, dword ptr [ebp-0C]

:0051F13D BA03000000 mov edx, 00000003

:0051F142 E86559EEFF call 00404AAC

:0051F147 C3 ret

........................................................................

经过很多代码来到这里,我是直接查找"请不要破解本公司的软件"字符,下两个可疑断点断在0051F41B

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0051F29B(U)

|

:0051F3B7 8D45F8 lea eax, dword ptr [ebp-08]

* Possible StringData Ref from Code Obj ->"Video Fixer"

|

:0051F3BA BA90F55100 mov edx, 0051F590

:0051F3BF E85C57EEFF call 00404B20

:0051F3C4 80BB9003000000 cmp byte ptr [ebx 00000390], 00

:0051F3CB 0F84F9000000 je 0051F4CA

:0051F3D1 B201 mov dl, 01

:0051F3D3 A130E04600 mov eax, dword ptr [0046E030]

:0051F3D8 E853EDF4FF call 0046E130

:0051F3DD 8BF0 mov esi, eax

:0051F3DF BA01000080 mov edx, 80000001

:0051F3E4 8BC6 mov eax, esi

:0051F3E6 E8E5EDF4FF call 0046E1D0

:0051F3EB 33C9 xor ecx, ecx

* Possible StringData Ref from Code Obj ->"\Software\cnghost\fixer"

|

:0051F3ED BAA4F55100 mov edx, 0051F5A4

:0051F3F2 8BC6 mov eax, esi

:0051F3F4 E83BEEF4FF call 0046E234

:0051F3F9 84C0 test al, al

:0051F3FB 0F849B000000 je 0051F49C

:0051F401 8D4DFC lea ecx, dword ptr [ebp-04]

* Possible StringData Ref from Code Obj ->"Date"

|

:0051F404 BAC4F55100 mov edx, 0051F5C4

:0051F409 8BC6 mov eax, esi

:0051F40B E8ECEFF4FF call 0046E3FC

:0051F410 8B45FC mov eax, dword ptr [ebp-04]

:0051F413 E82859EEFF call 00404D40

:0051F418 83F858 cmp eax, 00000058

:0051F41B 7425 je 0051F442 //这里不跳转,就会出现破解警告。

爆破点1

:0051F41B 7425 je 0051F442 //这里不跳转,就会出现破解警告。

改为

:0051F41B EB25 jmp 0051F442

Od直接修改复制到文件中,覆盖原来的文件。

* Possible StringData Ref from Code Obj ->"请不要破解本公司的软件,本软件是受软件法保护的"

->",不要引起不必要的麻烦!"

|

:0051F41D B8D4F55100 mov eax, 0051F5D4

:0051F422 E8051AF2FF call 00440E2C

:0051F427 A1C0B35200 mov eax, dword ptr [0052B3C0]

:0051F42C 8B00 mov eax, dword ptr [eax]

:0051F42E 8B10 mov edx, dword ptr [eax]

:0051F430 FF92E8000000 call dword ptr [edx 000000E8]

:0051F436 A1B4B15200 mov eax, dword ptr [0052B1B4]

:0051F43B 8B00 mov eax, dword ptr [eax]

:0051F43D E8DE98F4FF call 00468D20

...........................................................................

F9运行多次修复的文件,提示 "RSA decoding error: Block too small"

确定看到程序已经注册给Mr.David,这是我们先前种下的果实,快胜利了。

RSAKEY 我们是没有希望有的,但这个提示很容易去除。

命令行下

bp MessageBoxA

F9运行程序,立即中断。

77E23D68 > 55 PUSH EBP

77E23D69 8BEC MOV EBP,ESP

77E23D6B 51 PUSH ECX

77E23D6C 833D B884E477 0>CMP DWORD PTR DS:[77E484B8],0

77E23D73 74 29 JE SHORT user32.77E23D9E

77E23D75 64:A1 18000000 MOV EAX,DWORD PTR FS:[18]

77E23D7B 8B40 24 MOV EAX,DWORD PTR DS:[EAX 24]

77E23D7E 8945 FC MOV DWORD PTR SS:[EBP-4],EAX

77E23D81 B8 00000000 MOV EAX,0

77E23D86 B9 8088E477 MOV ECX,user32.77E48880

77E23D8B 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]

77E23D8E F0:0FB111 LOCK CMPXCHG DWORD PTR DS:[ECX],EDX ; LOCK 前缀

77E23D92 85C0 TEST EAX,EAX

77E23D94 75 08 JNZ SHORT user32.77E23D9E

堆栈友好提示。

0012F298 00468EAF /CALL 到 MessageBoxA 来自 dumped_.00468EAA

0012F29C 0275029A |hOwner = 0275029A (’dumped_’,class=’TApplication’)

0012F2A0 00EF8B40 |Text = "RSA decoding error: Block too small."

0012F2A4 00EF9E88 |Title = "dumped_"

0012F2A8 00000010 \Style = MB_OK|MB_ICONHAND|MB_APPLMODAL

0012F2AC 0012F324 指针到下一个 SEH 记录

0012F2B0 00468F19 SE 句柄

Ctrl F9 返回。

切换到错误信息框确定,

77E23DB2 C2 1000 RETN 10 //F8回到程序领空



00468EAA |. E8 BDEEF9FF CALL ; \MessageBoxA

爆破点2,OD直接Nop掉这句,你说简不简单?

00468EAA 90 NOP

00468EAB 90 NOP

00468EAC 90 NOP

00468EAD 90 NOP

00468EAE 90 NOP

00468EAF |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX //回到这里

00468EB2 |. 33C0 XOR EAX,EAX

00468EB4 |. 5A POP EDX

00468EB5 |. 59 POP ECX

00468EB6 |. 59 POP ECX

00468EB7 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX

00468EBA |. 68 208F4600 PUSH dumped_.00468F20

00468EBF |> 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]

00468EC2 |. 3B45 E8 CMP EAX,DWORD PTR SS:[EBP-18]

00468EC5 |. 74 38 JE SHORT dumped_.00468EFF

........................................................................

到此,全部暗桩清除,伪注册用户Mr.David 诞生。

请看胜利截图。





破解小结:



这个程序的RAS认证全部集中在比较软件是否过期处,幸运啊,后面有多处明文提示。

一处壳中指针修正,一处暗桩,另一个是Asprotect内置的无RSAKEY文件错误提示。

三大位置破解即可完美爆破。


最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 11:27 , Processed in 0.246448 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部