8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

破解1stOptv1.5 Demo和Keygen 1stOptv1.0

IT171中文网 管理员组 2013-6-29 1578

【文章标题】:
移花接木巧妙Crack 1stOptv1.5 Demo
追本溯源轻松Keygen 1stOptv1.0
【文章作者】: winndy

但是用键盘,可以在文本框中输入路径,运行后,可生成结果保存文件和参数值保存文件。但点旁边的文件按钮,却不能同时设置两个文本框中的路径。正式注册版也如此,看来是个bug了。
既然1stOptv1.5 被整成这个样子,何不把这个bug也修复一下。
0068F47A mov edx, [ebp-38]
0068F47D pop eax
0068F47E call 00404910 ; D7.System.@LStrCmp;
0068F483 jnz short 0068F4D6
0068F485 push 0
0068F487 push 0068F5E8 ; 文件”
0068F48C lea edx, [ebp-44]
0068F48F mov eax, ebx
0068F491 call 0046CC0C
0068F496 push dword ptr [ebp-44]
0068F499 push 0068F62C ; “已被用于保存结果文件,请试另一文件名!
0068F49E lea eax, [ebp-40]
0068F4A1 mov edx, 3
0068F4A6 call 004048C0
0068F4AB mov eax, [ebp-40] ; |
0068F4AE cx, [68F620] ; |
0068F4B5 xor edx, edx ; |
0068F4B7 call 0046E8C0 ; 1stOpt_u.0046E8C0
0068F4BC jmp short 0068F4D6
0068F4BE lea edx, [ebp-48]
0068F4C1 mov eax, ebx
0068F4C3 call 0046CC0C
0068F4C8 mov edx, [ebp-48]
0068F4CB mov eax, [esi+5C8]
0068F4D1 call 0044540C ; D7.Controls.TControl.SetText(TControl;TCaption);
0068F4D6 xor eax, eax
关键在这里:0068F483 jnz short 0068F4D6
跳到了 0068F4D6,正好把上面那个TControl.SetText跳过去了。
0068F47E处的比较,是看结果文件名和参数文件名相同否。
修改方法,是跳到0068F4BE,
0068F483 jnz short 0068F4BE
保存,运行,OK!
jnz short 0068F4D6 的机器码是75 51
jnz short 0068F4BE 的机器码是75 39
只改动一个byte就ok了。
1stOpt v1.0中:
006849C2 call 00404910 ; D7.System.@LStrCmp;
006849C7 jnz short 00684A1A ;应该跳到00684A02
[省略…]
00684A02 lea edx, [ebp-48]
00684A05 mov eax, ebx
[省略…]
00684A15 call 0044540C
00684A1A xor eax, eax
006849C7处的机器码由75 51改成75 39。
很简单,就一个byte,下面学着对v1.0来Inline patch一下,越是简单,用来学习入门越是有效果。
脱壳后的V1.0的EP是
006C0608 > $ 55 push ebp
基地址为00400000。
006C0608-00400000=002C0608
下面用ultraedit打开未脱壳的1stOpt.exe,搜索08 06 2C 00,找到唯一一处。
0010c4d2h: 08 06 2C 00 ; ..,.
将其改成:0077114B(code patch到的地方)-00400000=0037114B
0010c4d2h: 4B 11 37 00 ; ..,.
三个byte。这样程序解压后,首先跳到我们patch的地方0077114B。
然后把006849C7处的机器码由75 51改成75 39。
再跳到原来的入口006C0608。
在没有脱壳的v1.0文件中写下下面的汇编代码,找到机器码:
0077114B C605 C8496800 39 mov byte ptr [6849C8], 39
00771152 68 08066C00 push 006C0608
00771157 C3 retn
在rva=0077114B-00400000(Imagebase)=0037114B所对应的raw offset处写上上面的机器码。
用LordPE打开未脱壳的1stOpt.exe,可以看到002C06D0在.aspack段。
.aspack段的VOffset是00371000,VSize是00002000,ROffset是0010C400,RSize是00001A00。
Roffset=(0037114B-00371000)+ 0010C400=0010C54B
用LordPE的FLC可以验证。
用ultraedit跳到offset:0010C54B,然后写下上面的机器码:
C605C8496800396808066C00C3
保存之。Inline Patch成功。
参考了:http://www.pediy.com/bbshtml/BBS2/FORUM260.HTM
下面再用DUP来作个patcher玩玩。
DUP很好用。有兴趣的还可以借助the aPE来玩玩Inline patch。
【经验总结】:
1.尽管1stOptv1.5是个demo,但是v1.0和v1.5的关于这些基本功能的代码应该没有改变,所以可以直接把v1.0中的代码移植到v1.5中去。幸运的是修复call的时候,可以在1.5中找到与1.0中相对应的函数,主要也是根据函数的特征代码查找到的,要不然的话,要我去修改Import Table,再导入其他函数,累死我去,也许还不一定做得出来。
2.通过追本溯源,找到文件加密的核心组建HKStreams,这样就把主要精力集中在分析Auto2Fit v3.0的注册机制上,而不是把精力耗费在逆向HKStreams上了,这可是个开源的组件啊,.否则,让我去分析HKStreams的blowfish算法和LHA算法,那我磨掉我的意志力的,. 这也算是一种从大局着手的思想,也是代码复用的折射。另外,会编程,对于逆向具有很大的帮助,如DFCG的”我要”所说的,正向和逆向从来就不是对立的。
【致 谢】: Pediy,Unpack.cn,FCG,DFCG,PYG,FST,Exetools,ARTeam,Tuts4you,0wei的朋友
【杀青时间】:2006.09.21


来源:网络转载
[hr]

最新回复 (34)
全部楼主
返回
发新帖
我也是有底线哒~