首页
社区
课程
招聘
[原创]内存优化大师破解手记
发表于: 2010-3-30 21:15 5109

[原创]内存优化大师破解手记

2010-3-30 21:15
5109
标 题: 【原创】内存优化大师破解手记
作 者: FlyingSnow
时 间: 2010-03-30,21:17:22
链 接: http://bbs.pediy.com/showthread.php?t=783628

下 载:http://www.onlinedown.net/soft/39779.htm
描 述:专业的内存优化软件.完全提升系统效率.

特色功能:
●采用和系统内核连接的优化核心,优化释放内存快捷简单.
●与传统排除到虚拟内存文件的内存优化完全区分.
●系统底层操作内存优化,优化后不影响程序运行及速度.
●优化后系统速度将明显提高,在系统任务管理器中可查看明显效果.
●全面支持Windows Server系统,单机与服务器均适用.

软件已通过英特尔软件认证!

真假不管,至少测试效果还算不错。

Peid查壳是Aspack 2.12,也没有什么附加数据,直接用aspackdie脱掉,保存为unpacked.exe。直接运行提示主程序被修改或破坏,说明有自校验。
OD载入之,运行,OD直接没了。
安装文件夹下有krnln.fnr文件,典型的非完全编译版易语言程序,调试比较烦。
首先去掉反调试。
OD重新载入,bp OpenProcess,断下两次(第一次断下在TrayIcon模块,直接跳过),Alt+F9返回至主模块,代码:
004D5AFB    3965 D0         CMP DWORD PTR SS:[EBP-30],ESP
004D5AFE    74 0D           JE SHORT Unpacked.004D5B0D
004D5B00    68 06000000     PUSH 6
004D5B05    E8 87360000     CALL Unpacked.004D9191
004D5B0A    83C4 04         ADD ESP,4
004D5B0D    8945 DC         MOV DWORD PTR SS:[EBP-24],EAX
004D5B10    837D 08 00      CMP DWORD PTR SS:[EBP+8],0
004D5B14    0F85 22000000   JNZ Unpacked.004D5B3C
004D5B1A    8965 D4         MOV DWORD PTR SS:[EBP-2C],ESP
004D5B1D    FF75 DC         PUSH DWORD PTR SS:[EBP-24]
004D5B20    B8 0E000000     MOV EAX,0E
004D5B25    E8 6D360000     CALL Unpacked.004D9197
004D5B2A    3965 D4         CMP DWORD PTR SS:[EBP-2C],ESP
004D5B2D    74 0D           JE SHORT Unpacked.004D5B3C
004D5B2F    68 06000000     PUSH 6
004D5B34    E8 58360000     CALL Unpacked.004D9191
004D5B39    83C4 04         ADD ESP,4
004D5B3C    E9 29000000     JMP Unpacked.004D5B6A
004D5B41    8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]
004D5B44    50              PUSH EAX
004D5B45    FF75 E4         PUSH DWORD PTR SS:[EBP-1C]
004D5B48    E8 5DC5FFFF     CALL Unpacked.004D20AA
…………………………
004D5CAA   /74 0F           JE SHORT Unpacked.004D5CBB
004D5CAC   |8B07            MOV EAX,DWORD PTR DS:[EDI]
004D5CAE   |83C7 04         ADD EDI,4
004D5CB1   |49              DEC ECX
004D5CB2   |74 05           JE SHORT Unpacked.004D5CB9
004D5CB4   |0FAF07          IMUL EAX,DWORD PTR DS:[EDI]
004D5CB7  ^|EB F5           JMP SHORT Unpacked.004D5CAE
004D5CB9   |8BC8            MOV ECX,EAX
004D5CBB   \81F9 04010000   CMP ECX,104
004D5CC1    7E 05           JLE SHORT Unpacked.004D5CC8
004D5CC3    B9 04010000     MOV ECX,104
004D5CC8    8BF3            MOV ESI,EBX
004D5CCA    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
004D5CCC    5F              POP EDI
004D5CCD    5B              POP EBX
004D5CCE    83C7 04         ADD EDI,4
004D5CD1    81C3 04010000   ADD EBX,104
004D5CD7    E8 91340000     CALL Unpacked.004D916D
004D5CDC    83C4 04         ADD ESP,4
004D5CDF    58              POP EAX
004D5CE0    8945 E8         MOV DWORD PTR SS:[EBP-18],EAX
004D5CE3  ^ E9 0AFCFFFF     JMP Unpacked.004D58F2          //----长跳转

跟随长跳转来到
004D58F2    837D E8 00      CMP DWORD PTR SS:[EBP-18],0
004D58F6    0F84 EC030000   JE Unpacked.004D5CE8               //--必须跳
004D58FC    68 00000000     PUSH 0
004D5901    BB D4080000     MOV EBX,8D4
004D5906    E8 6E380000     CALL Unpacked.004D9179
004D590B    83C4 04         ADD ESP,4
004D590E    8945 D0         MOV DWORD PTR SS:[EBP-30],EAX
004D5911    837D D0 03      CMP DWORD PTR SS:[EBP-30],3
004D5915    0F85 31000000   JNZ Unpacked.004D594C

改成jmp,保存跳过反调试。

文件自校验:
重新载入程序,bp MessageBoxA,运行,断下。
0012FB08   10060006  /CALL 到 MessageBoxA 来自 krnln.10060000
0012FB0C   00000000  |hOwner = NULL
0012FB10   00277AD0  |Text = "主程序被修改或破坏!"
0012FB14   0023D538  |Title = "错误"
0012FB18   00002040  \Style = MB_OK|MB_ICONASTERISK|MB_TASKMODAL

连续Ctrl+F9返回一直到主模块。来到这里
004D4CE4    50              PUSH EAX
004D4CE5    68 03000000     PUSH 3
004D4CEA    BB 00030000     MOV EBX,300
004D4CEF    E8 85440000     CALL Unpacked.004D9179          //MessageBoxA
004D4CF4    83C4 28         ADD ESP,28
004D4CF7    8B5D F8         MOV EBX,DWORD PTR SS:[EBP-8]
004D4CFA    85DB            TEST EBX,EBX
004D4CFC    74 09           JE SHORT Unpacked.004D4D07
004D4CFE    53              PUSH EBX
004D4CFF    E8 69440000     CALL Unpacked.004D916D
004D4D04    83C4 04         ADD ESP,4

往上找,找到一个可以跳过这个消息框的地方
004D4C4F    85DB            TEST EBX,EBX
004D4C51    74 09           JE SHORT Unpacked.004D4C5C
004D4C53    53              PUSH EBX
004D4C54    E8 14450000     CALL Unpacked.004D916D
004D4C59    83C4 04         ADD ESP,4
004D4C5C    817D F4 5034030>CMP DWORD PTR SS:[EBP-C],33450     //比较大小
004D4C63    0F8E B8000000   JLE Unpacked.004D4D21                       //小于则跳
004D4C69    B8 EBF84A00     MOV EAX,Unpacked.004AF8EB                ; ASCII "D6F7B3CCD0F2B1BBD0DEB8C4BBF2C6C6BBB521"
004D4C6E    8945 FC         MOV DWORD PTR SS:[EBP-4],EAX
004D4C71    8D45 FC         LEA EAX,DWORD PTR SS:[EBP-4]
004D4C74    50              PUSH EAX

很显然是比较文件大小,强制跳过。
不过呢,我们来找找是不是有别的地方也有校验吧,这句33450很有代表性。
Ctrl+F直接搜索CMP DWORD PTR SS:[EBP-C],33450,果然又找到一处
004D70B1    83C4 04         ADD ESP,4
004D70B4    817D F4 5034030>CMP DWORD PTR SS:[EBP-C],33450   //这里
004D70BB    0F8E 09010000   JLE Unpacked.004D71CA                       //同上,过掉
004D70C1    B8 EBF84A00     MOV EAX,Unpacked.004AF8EB                ; ASCII "D6F7B3CCD0F2B1BBD0DEB8C4BBF2C6C6BBB521"
004D70C6    8945 FC         MOV DWORD PTR SS:[EBP-4],EAX

把两处都patch掉后校验就去掉了。

注册:
这个程序属于重启验证,把注册码以十六进制ASCII方式放在reg.dat文件中。
顺便说一句,如果没有去掉上面提到的第二个大小校验的话,在输入注册码的时候就会提示错误并自动删除main.dat文件,这下就只能重装这个软件了。
重新载入程序,bp CreateFileW,一直F9直到程序读取reg.dat。返回到程序领空
004D6425    B8 11334000     MOV EAX,Unpacked.00403311
004D642A    50              PUSH EAX
004D642B    68 01000000     PUSH 1
004D6430    BB 68020000     MOV EBX,268
004D6435    E8 3F2D0000     CALL Unpacked.004D9179     //打开文件
004D643A    83C4 10         ADD ESP,10                           //返回到这里
004D643D    8945 F0         MOV DWORD PTR SS:[EBP-10],EAX
004D6440    8B5D F4         MOV EBX,DWORD PTR SS:[EBP-C]
004D6443    85DB            TEST EBX,EBX
004D6445    74 09           JE SHORT Unpacked.004D6450
004D6447    53              PUSH EBX
004D6448    E8 202D0000     CALL Unpacked.004D916D
004D644D    83C4 04         ADD ESP,4
004D6450    68 01030080     PUSH 80000301
004D6455    6A 00           PUSH 0
004D6457    68 0A000000     PUSH 0A
004D645C    68 05000080     PUSH 80000005
004D6461    6A 00           PUSH 0
004D6463    8B45 F0         MOV EAX,DWORD PTR SS:[EBP-10]
004D6466    85C0            TEST EAX,EAX
004D6468    75 05           JNZ SHORT Unpacked.004D646F
004D646A    B8 32F44A00     MOV EAX,Unpacked.004AF432
004D646F    50              PUSH EAX
004D6470    68 02000000     PUSH 2
004D6475    BB 9C010000     MOV EBX,19C
004D647A    E8 FA2C0000     CALL Unpacked.004D9179                   ; //读取了注册码,16进制形式
004D647F    83C4 1C         ADD ESP,1C
004D6482    8945 E4         MOV DWORD PTR SS:[EBP-1C],EAX
004D6485    8955 E8         MOV DWORD PTR SS:[EBP-18],EDX
004D6488    894D EC         MOV DWORD PTR SS:[EBP-14],ECX
004D648B    8B5D F0         MOV EBX,DWORD PTR SS:[EBP-10]
004D648E    85DB            TEST EBX,EBX
004D6490    74 09           JE SHORT Unpacked.004D649B
004D6492    53              PUSH EBX
004D6493    E8 D52C0000     CALL Unpacked.004D916D
004D6498    83C4 04         ADD ESP,4
004D649B    8B4D EC         MOV ECX,DWORD PTR SS:[EBP-14]
004D649E    81F9 04000080   CMP ECX,80000004
004D64A4    74 0D           JE SHORT Unpacked.004D64B3
004D64A6    68 05000000     PUSH 5
004D64AB    E8 E12C0000     CALL Unpacked.004D9191
004D64B0    83C4 04         ADD ESP,4
004D64B3    8D45 E4         LEA EAX,DWORD PTR SS:[EBP-1C]
004D64B6    50              PUSH EAX
004D64B7    E8 69BFFFFF     CALL Unpacked.004D2425                   ; //转换为ASCII形式
004D64BC    8945 E0         MOV DWORD PTR SS:[EBP-20],EAX
004D64BF    8B5D E4         MOV EBX,DWORD PTR SS:[EBP-1C]
004D64C2    85DB            TEST EBX,EBX
004D64C4    74 09           JE SHORT Unpacked.004D64CF
004D64C6    53              PUSH EBX
004D64C7    E8 A12C0000     CALL Unpacked.004D916D
004D64CC    83C4 04         ADD ESP,4
004D64CF    8B1D F0043C01   MOV EBX,DWORD PTR DS:[13C04F0]
004D64D5    85DB            TEST EBX,EBX
004D64D7    74 09           JE SHORT Unpacked.004D64E2
004D64D9    53              PUSH EBX
004D64DA    E8 8E2C0000     CALL Unpacked.004D916D
004D64DF    83C4 04         ADD ESP,4
004D64E2    8B45 E0         MOV EAX,DWORD PTR SS:[EBP-20]
004D64E5    A3 F0043C01     MOV DWORD PTR DS:[13C04F0],EAX
004D64EA    68 04000080     PUSH 80000004
004D64EF    6A 00           PUSH 0
004D64F1    A1 F0043C01     MOV EAX,DWORD PTR DS:[13C04F0]
004D64F6    85C0            TEST EAX,EAX
004D64F8    75 05           JNZ SHORT Unpacked.004D64FF
004D64FA    B8 11334000     MOV EAX,Unpacked.00403311
004D64FF    50              PUSH EAX
004D6500    68 01000000     PUSH 1
004D6505    BB 64010000     MOV EBX,164
004D650A    E8 6A2C0000     CALL Unpacked.004D9179
004D650F    83C4 10         ADD ESP,10
004D6512    8945 F8         MOV DWORD PTR SS:[EBP-8],EAX
004D6515    8955 FC         MOV DWORD PTR SS:[EBP-4],EDX
004D6518    68 04000080     PUSH 80000004
004D651D    6A 00           PUSH 0
004D651F    A1 E8043C01     MOV EAX,DWORD PTR DS:[13C04E8]
004D6524    85C0            TEST EAX,EAX
004D6526    75 05           JNZ SHORT Unpacked.004D652D
004D6528    B8 11334000     MOV EAX,Unpacked.00403311
004D652D    50              PUSH EAX
004D652E    68 01000000     PUSH 1
004D6533    BB 64010000     MOV EBX,164                              ; 这里已经可以看到机器码了
004D6538    E8 3C2C0000     CALL Unpacked.004D9179
004D653D    83C4 10         ADD ESP,10
004D6540    8945 F0         MOV DWORD PTR SS:[EBP-10],EAX
004D6543    8955 F4         MOV DWORD PTR SS:[EBP-C],EDX
004D6546    DD45 F0         FLD QWORD PTR SS:[EBP-10]
004D6549    DC0D 82F94A00   FMUL QWORD PTR DS:[4AF982]
004D654F    DD5D E8         FSTP QWORD PTR SS:[EBP-18]
004D6552    DD45 E8         FLD QWORD PTR SS:[EBP-18]
004D6555    DC35 50F44A00   FDIV QWORD PTR DS:[4AF450]
004D655B    DD5D E0         FSTP QWORD PTR SS:[EBP-20]
004D655E    DD45 E0         FLD QWORD PTR SS:[EBP-20]
004D6561    DC0D 8AF94A00   FMUL QWORD PTR DS:[4AF98A]
004D6567    DD5D D8         FSTP QWORD PTR SS:[EBP-28]
004D656A    68 01060080     PUSH 80000601
004D656F    FF75 DC         PUSH DWORD PTR SS:[EBP-24]
004D6572    FF75 D8         PUSH DWORD PTR SS:[EBP-28]
004D6575    68 01000000     PUSH 1
004D657A    BB 60000000     MOV EBX,60
004D657F    E8 F52B0000     CALL Unpacked.004D9179
004D6584    83C4 10         ADD ESP,10
004D6587    8945 CC         MOV DWORD PTR SS:[EBP-34],EAX
004D658A    DB45 CC         FILD DWORD PTR SS:[EBP-34]
004D658D    DD5D CC         FSTP QWORD PTR SS:[EBP-34]
004D6590    DD45 F8         FLD QWORD PTR SS:[EBP-8]
004D6593    DC65 CC         FSUB QWORD PTR SS:[EBP-34]
004D6596    D9E4            FTST
004D6598    DFE0            FSTSW AX
004D659A    F6C4 01         TEST AH,1
004D659D    74 02           JE SHORT Unpacked.004D65A1
004D659F    D9E0            FCHS
004D65A1    DC1D 92F94A00   FCOMP QWORD PTR DS:[4AF992]
004D65A7    DFE0            FSTSW AX
004D65A9    F6C4 41         TEST AH,41
004D65AC    0F84 CD000000   JE Unpacked.004D667F                     ; 关键跳转
004D65B2    C705 EC043C01 0>MOV DWORD PTR DS:[13C04EC],1

中间的浮点指令看不懂
偷懒办法直接把下面的je nop掉,就是注册版啦有能力就追注册码吧,呵呵

保存,现在就是注册版啦。

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 261
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
说实话,您关注我的问题这么久,我真的感谢您,让我学到了许多。

其实到现在已经没有什么问题了,只是有几个点不解。

易语言真的是让人头疼!

1、"安装文件夹下有krnln.fnr文件,典型的非完全编译版易语言程序,调试比较烦。"

krnln.fnr 这个文件在易语言中是一个什么功能的文件?  所谓的典型性可否就其原委介绍一二? 当然看您时间

2.1、“第一次断下在TrayIcon模块”  这是如何确定的,我在OD里没有看到明显的标志提示

2.2、这个易程序我就当它是个残次品,但是它能运行,呵。它有壳、自校验、反调试、重启验证多种保护。最疑惑的就是这个反调试:
004D58F2    837D E8 00      CMP DWORD PTR SS:[EBP-18],0
004D58F6    0F84 EC030000   JE Unpacked.004D5CE8               //--必须跳
如何确定这句是关键句?经验?

2.3、在自校验比较大小处有一个长串的ASCII值ASCII "D6F7B3CCD0F2B1BBD0DEB8C4BBF2C6C6BBB521"  这个是什么?

3、号召大家看一下这个程序,这个程序在2G以上的内存的机器里自动就变成已注册版了,不知为何,可能代码中有相关函数,希望朋友们可以逆向一下关键部分。

4、这是关于算法的问题,我也看不懂,估计是一个不太独立的算法,期待大家的注册函数。

再次感谢楼主,谢谢您。有问题再请教。
2010-3-30 22:49
0
雪    币: 261
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
FlyingSnow君 您有看到这些问题吗?  等待您的指点
2010-4-1 14:47
0
雪    币: 261
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
就该软件在大内存(大于等于2G)机器上运行安装后自动变成已注册版的问题,我比较了一下小内存机器上和大内存机器上这个软件在运行时间的不同,有这样的发现:
在004D65BC处有:ASCII D2D1D7A2B2E1B0E6B1BE5B526567697374657265645D

在004D4F81处有: ASCII "534F4654574152455C4D6963726F736F66745C57696E646F77735C43757272656E7456657273696F6E5C52756E5CC4DAB4E6D3C5BBAFD7A8BCD2"

这最后一处过得后就自动开始运行,可能这个就是注册码,回家后再试一下。

不过这个还不是最大的不同,最大的不同在于,大内存机器上安装这个软件时根本不会有reg.dat这个文件出现,小内存上则有;再者在004D65AC处的关键跳在大内存机器上自动变成了“跳转未实现”和我们在小内存机器上的nop填充效果是一样的。   

到这里就出现了一个问,大内存机器上为什么为自动变成“跳转未实现”  我在跟踪过程中没有发现像小机器上需要硬件编码的情况,而且在这之前的reg.dat文件虽然在系统中不存在,但是软件运行过程上还是要读取这个文件,但却没有错误出现?

我的看法:我觉得这个软件在安装之初就对机器的内存大小有了一个检测,大则功能全开,小则变成未注册版。 所以如果真的是这样,那么针对这个问题如何下断点观察呢?请指教,谢谢。
也请大家帮助
2010-4-1 14:57
0
游客
登录 | 注册 方可回帖
返回
//