• 标 题:关于VFP&exe2.0的研究过程(多人成果) (5千字)
  • 作 者:多情俏狐
  • 时 间:2002-8-6 9:18:53
  • 链 接:http://bbs.pediy.com

关于VFP&exe2.0的研究过程

脱壳后:
:0047248E 3B45D8                  cmp eax, dword ptr [ebp-28]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0047248C(C)
|
:00472491 7411                    je 004724A4====>74改eb跳过死循环
:00472493 3B75F0                  cmp esi, dword ptr [ebp-10]
:00472496 7C0C                    jl 004724A4
***===========
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004724A2(C)
|
:00472498 8BC6                    mov eax, esi
:0047249A 2BC3                    sub eax, ebx
:0047249C 8945F0                  mov dword ptr [ebp-10], eax
:0047249F 3B75F0                  cmp esi, dword ptr [ebp-10]
:004724A2 7DF4                    jge 00472498
***===========此处为一死循环,是一个典型暗桩,就是它造成程序虽然正常脱壳但却不能运行。
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00472491(C), :00472496(C)
|
:004724A4 8B45E0                  mov eax, dword ptr [ebp-20]
:004724A7 8945F8                  mov dword ptr [ebp-08], eax
:004724AA 8B45E4                  mov eax, dword ptr [ebp-1C]
:004724AD 8945FC                  mov dword ptr [ebp-04], eax

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00472332(C), :0047237B(U)
|
:004724B0 33C0                    xor eax, eax


然后进一步破解:

:004733AE E8E909F9FF              call 00403D9C
:004733B3 7516                    jne 004733CB====>跳到注册版处
:004733B5 B8E8A94700              mov eax, 0047A9E8
:004733BA B962000000              mov ecx, 00000062

* Possible StringData Ref from Code Obj ->"ABCDEF20"
                                  |
:004733BF BAF8354700              mov edx, 004735F8
:004733C4 E8DBF6FFFF              call 00472AA4
:004733C9 EB64                    jmp 0047342F====>这一跳就成未注册版了

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004733B3(C)
|
:004733CB 8D55EC                  lea edx, dword ptr [ebp-14]
    .
    .
    .
:0047340D E8EE15FBFF              call 00424A00

* Possible StringData Ref from Code Obj ->"注册给"
                                  |
:00473412 BA0C364700              mov edx, 0047360C
继续向下看:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004733C9(U)
|
:0047342F 8B8330030000            mov eax, dword ptr [ebx+00000330]
:00473435 83783400                cmp dword ptr [eax+34], 00000000
:00473439 7512                    jne 0047344D===>相等则为专业版,不相等则为企业版

* Possible StringData Ref from Code Obj ->"专业版"
                                  |
:0047343B BA1C364700              mov edx, 0047361C
:00473440 8B8320030000            mov eax, dword ptr [ebx+00000320]
:00473446 E8F516FBFF              call 00424B40
:0047344B EB10                    jmp 0047345D

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

* Possible StringData Ref from Code Obj ->"企业版"
                                  |
:0047344D BA2C364700              mov edx, 0047362C
:00473452 8B8320030000            mov eax, dword ptr [ebx+00000320]
:00473458 E8E316FBFF              call 00424B40


upx+cryptor壳的去除

程序:老王的vfp&exe2.0演示版2002.4.29版
下载地址:http://cfyn.yeah.net
工具:importREC v1.4.2+, fi249, trw2000,bw2000,winhex
fi249报告该程序用upx+cryptor加密
找入口:BW2000报告为476824-400000=076824
运行trw2000
bpx 476824
运行vfpexe2.exe断下后
suspend
运行importRECua并激活vfpexe2
入口改为76824点IAT AotuSearch,点Get Imports
点右键->选select code section(s)条,将name下的框全选
点Full dump存盘保存
用winhex调入脱壳后的文件,将入口点09e000修改为076824
运行脱壳后的文件......没反应???
经用trw2000跟踪发现在47248e处有一陷阱
47248e CMP EAX,[EBP-28]
记下[EBP-28]处的值为01f2fee26,eax=03a8e3d6
用winhex在程序中找4A91F201换为B214A803即大功告成
至于演示版700K的限制有两处很好改,自己看着办吧。
改演示版700K限制
找:833D78A9470072
第一处将7E5D改为EB5d
在4738e3处:
第二处将0F8E93000000改为90E993000000
第二处陷阱:47433a B820A10700 MOV EAX,0007A120
改为: 47433a B8203F0d00 MOV eax,000d3f20
这样改后还须再次修改3f0处的数据
trw2000再次调入程序
G 47248E
EAX=03a8e4c3
将3F0处改为C3E4A803

刚下载的可能不是一个版本,入口点:476824

脱壳前后密钥存放位置一样,没加密,在03f0处,此版本为26EEF201
比较的地方在47248e CMP EAX,[EBP-28]
将3F0处的数据改为EAX中的数据(注意倒着放)如EAX=03A8E3D6改文件时应
为D6E3A803.

小球的破解过程:

我也不知道是否成功了,因为老王说演示版加密不完全。因为我没有注册版,所以就交给你作了,你可以用注册版和破解版对同一个软件加壳,然后用工具比较一下。哈哈哈。我想这个破解版应该不是完美的。
下面是你要的简要的过程,也没有什么复杂的,只是要慢慢的试。
经过一步一步的跟踪,我下断473342,然后d edx,可以看到我的序列号。那就再用bpm [序列号],很快发现有不少的call和jz,jnz。只有慢慢试了,我没有什么好办法阿!而后发现4735f8里面放着ABCEF20,这个数可以在vfpexe2.exe中找到,老王用这个数作了处理,有98次循环,我懒得看。处理后的数据放在112c170开始的一片空间里,而后我没有发现老王又对这个地址进行访问。不知道原因。而后发现了4733ae这个地址,是两个-1在比较,在vfpexe2.exe中也可以找到,我试了用r lf z,竟然成了注册版了。哈哈,其实也就这么简单。(但是不知道是否破解成功)而后发现了一个企业版的功能,在473435这个地址有个cmp,我为了防止暗桩用mov给它付了个1,但愿可以躲过以后的暗桩。就这样有可以变成企业版了。我想大概和专业版一样吧?哈哈。至于注册名吗?在vfpexe2.exe中也可以找到便宜量在8dd47处。
好了,大概的过程就是这样的,现在看看我竟然没有修改vfpexe.dll文件。发现没有vfpexe.dll文件时依然是注册版,由此可见我的破解是90%不成功的。因为老王是通过这个dll文件来注册的,我竟然没有用到?哈哈!