吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16550|回复: 15
收起左侧

[原创] 吾爱破解脱壳练习----未知壳(哭笑不得)

 关闭 [复制链接]
小生我怕怕 发表于 2008-10-29 00:03
一转眼我们的脱壳练习已经第20期啦,在这其中我相信许多的朋友也学习到了东西
必能脱掉此壳
本期考核主题为:未知壳(大家也可以叫哭笑不得)
1.脱壳后的文件大家以千脑形式上传,目的是为了便于隐藏文件和节约论坛空间
2.脱壳后的文件,请大家以脱文附带脱壳后程序打包压缩传于千脑网盘
3.对于回帖过程中千万不要出现灌水,否则BAN了ID
4.对于有优秀脱文或优秀脱壳方法的朋友,给于适当威望奖励
5.鉴于此练习是针对论坛的所有人,请大家踊跃参加,如果不是脱了壳教作业的,请不要顶帖子,方便管理查阅,及时给出评分
6.以下为需要设置威望的格式
7.脱壳一以周期计算,(周期=等于二天)
8.脱壳周期一结束,就开始公布答案让大家能有更充分的学习环境,让不懂脱的朋友去寻找你失误的地方争取早日赶上论坛的积极份子
9.我们要的是脱文,并不是脱壳机去脱的,如果用脱机脱了别拿来,请一定附带上脱文
10.我们讲对每次脱壳练习选择一个最好的脱壳分析过程,方便大家学习,每次脱壳练习结束后会说出楼数,对于被选种的朋友,我们会酌情给予CB或者威望进行奖励
11.由于前段时间我们的练习群开放式验证加入,导致群在短短几天爆满,现在已经清除了所有没有参加练习的朋友,以后只要参加我们一次练习就会收到我们的短消息邀请加入
平时我们都是关闭模式

12.本期提示:程序为C++编写的,壳是伪装类别的壳,也可说捆绑壳,会的人可以秒杀,不会的人就真的够得哭啦,方法靠大家摸索



公告:
暂无


紧急通知:
暂无

练习一:(结果已经公布)
http://www.52pojie.cn/thread-10496-1-1.html
最佳分析:第10楼unpack

练习二:(结果已经公布)
http://www.52pojie.cn/thread-10607-1-1.html
最佳分析:第9楼lqiulu

练习三:(结果已经公布)
http://www.52pojie.cn/thread-10688-1-1.html
最佳分析:第11楼傻人有傻福

练习四:(结果已经公布)
http://www.52pojie.cn/thread-10850-1-1.html
最佳分析:第11楼维护世界和平

练习五:(结果已经公布)
http://www.52pojie.cn/thread-10990-1-1.html
最佳分析:第3楼维护世界和平

练习六:(结果已经公布)
http://www.52pojie.cn/thread-11112-1-1.html
最佳分析:第12楼ximo

练习七:(结果已经公布)
http://www.52pojie.cn/thread-11244-1-1.html
最佳分析:第14楼傻人有傻福

练习八:(结果已经公布)
http://www.52pojie.cn/thread-11306-1-1.html
最佳分析: 第15楼unpack

练习九:(结果已经公布)
http://www.52pojie.cn/thread-11446-1-1.html
最佳分析: 第1楼小生我怕怕

练习十:(结果已经公布)
http://www.52pojie.cn/thread-11585-1-1.html
最佳分析:第10楼unpack

练习十一:(结果已经公布)
http://www.52pojie.cn/thread-11747-1-1.html
最佳分析:第9楼unpack

练习十二:(结果已经公布)
http://www.52pojie.cn/thread-11883-1-1.html
最佳分析:第19楼unpack

练习十三:(结果已经公布)
http://www.52pojie.cn/thread-12011-1-1.html
最佳分析:第1楼小生我怕怕

练习十四:(结果已经公布)
http://www.52pojie.cn/thread-12135-1-1.html
最佳分析:第3楼 qiulu

练习十五:(结果已经公布)
http://www.52pojie.cn/thread-12279-1-1.html
最佳分析:第13楼pcfans

练习十六:(结果已经公布)
http://www.52pojie.cn/thread-12362-1-1.html
最佳分析:第18楼unpack

练习十七:(结果已经公布)
http://www.52pojie.cn/thread-12498-1-1.html
最佳分析:第6楼 aisht

练习十八:(结果已经公布)
http://www.52pojie.cn/thread-12620-1-1.html
最佳分析:第8楼 unpack

练习十九:(结果已经公布)
http://www.52pojie.cn/thread-12822-1-1.html
最佳分析:第7楼 unpack

UnPackMe.rar

17 KB, 下载次数: 528, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 1热心值 +1 收起 理由
min-gong + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 小生我怕怕 发表于 2008-10-29 00:04
本期练习我们只要注意点,在论坛教程是有的
好我们废话就不多说啦,我们来看下
BP WriteProcessMemory 是读取程序的大小参数也可以解释为处理写入的数据
━━━━━━━━━━━━━━━━━━━━━━━━━━
00400154 >8725 60EB4000 xchg dword ptr ds:[40EB60],esp//OD载入
0040015A61popad //一看就是FSG的壳
0040015B94xchg eax,esp//单步到这里后注意我们的堆栈窗口
0040015C55push ebp
0040015DA4movs byte ptr es:[edi],byte ptr ds:[esi]
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040EB64 004001E8UnPackMe.004001E8
0040EB68 004001DCUnPackMe.004001DC
0040EB6C 004001DEUnPackMe.004001DE //下面一句是我们的OEP
0040EB70 00402F18UnPackMe.00402F18 //我们在这句右键反汇编窗口中跟随
0040EB74 > 7C801D77kernel32.LoadLibraryA
0040EB78 > 7C80ADA0kernel32.GetProcAddress
━━━━━━━━━━━━━━━━━━━━━━━━━━
00402F1800db 00 //我们跟随到这里后发现没有解码
00402F1900db 00//我们右键删除模块中的分析
00402F1A00db 00
00402F1B00db 00
00402F1C00db 00
━━━━━━━━━━━━━━━━━━━━━━━━━━
00402F180000add byte ptr ds:[eax],al //我们右键---断点---设置硬件访问断点
00402F1A0000add byte ptr ds:[eax],al //我们F9运行程序
00402F1C0000add byte ptr ds:[eax],al
00402F1E0000add byte ptr ds:[eax],al
00402F200000add byte ptr ds:[eax],al
━━━━━━━━━━━━━━━━━━━━━━━━━━
00402F1855push ebp//到了这里一定有朋友以为到了OEP啦
00402F198BECmov ebp,esp //其实到OEP也不假,但是只是到了第2层壳的OEP
00402F1B83C4 F0 add esp,-10 //在命令行下断:BP WriteProcessMemory
00402F1EB8 C02E4000 mov eax,UnPackMe.00402EC0 //下好断后我们F9运行程序
00402F23E8 D0EDFFFF call UnPackMe.00401CF8
00402F28E8 83FDFFFF call UnPackMe.00402CB0
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C80220F >8BFFmov edi,edi//运行后我们停在了这里
7C80221155push ebp //此时我们注意下我们的堆栈窗口
7C8022128BECmov ebp,esp
7C80221451push ecx
7C80221551push ecx
━━━━━━━━━━━━━━━━━━━━━━━━━━
0012FDE4 0040201B/CALL 到 WriteProcessMemory 来自 UnPackMe.00402016
0012FDE8 00000048|hProcess = 00000048 (window)//我们运行我们的lordPE把程序开始dump
0012FDEC 00400000|Address = 400000
0012FDF0 008F0000|Buffer = 008F0000 //我们注意这一句,他给程序写入了8F0000大小的程序
0012FDF4 00001000|BytesToWrite = 1000 (4096.)
0012FDF8 0012FF48\pBytesWritten = 0012FF48
0012FDFC 0012FE08指针到下一个 SEH 记录
━━━━━━━━━━━━━━━━━━━━━━━━━━
我们运行lordPE--选择程序进程---区域转存---找到大小为 8F0000大小的地址
1.jpg

转存后我们用16进制工具winhex打开看一下吧

2.jpg
熟悉PE的人都知道这就是我们程序的入口,如果不知道的朋友也可以用一个记事本打开看一下
我们载入后,我们选择--文件--另存为--保存为[文件名.exe]就可以啦

方法源自超兄教程中提及的方法,只要大家有看过基本达到秒杀之,但是如果不知道就真是哭笑不得啦
Hmily 发表于 2008-10-29 00:22
应该是女王写的PolyBox壳吧,一款捆绑壳,用了FSG的外衣,是把要加壳的程序当成一种资源加密起来,论坛有过讨论,脱壳比较简单

直接下
bp ResumeThread

1.jpg

断下后就可以看到了,ESI的值就是刚写入的资源地址,直接用LordPE Dump下那个地址所在的区段就可以了。

2.jpg

转存下来保存后缀为EXE的可执行文件就可以运行了。
zeger 发表于 2008-10-29 01:37
我是用秒脱得办法


OD载入程序直接F9让程序运行起来!
大家注意看的话会发现个问题~~[s:40]
OD的状态此时是终止的!!!



----------------------------------------------------------------------------------------------------
这个时候打开 PETools,你会发现有两个程序的进程~~~(想到些什么了吧,哈哈)



把镜像大小为00007000的程序(为什么是00007000 ,点一下路径分别查看调用的库函数就知道了) 完整转存
------------------------------------------------------------------------------------------------------
dump出来的程序已经不用进行修复了,可以运行! 查壳是Microsoft Visual C++ 6.0的~~



脱壳完毕!! 连夜交作业[s:39] 睡觉去咯
lqiulu 发表于 2008-10-29 02:17
载入程序初步印象是FSG的壳,
00400154 >8725 60EB4000 XCHGDWORD PTR [40EB60], ESP
0040015A61POPAD
0040015B94XCHGEAX, ESP //这里下断,看堆栈。
0040015C55PUSHEBP

---------------------------------------------------------
0040EB64 004001E8ASCII 02,"襲"
0040EB68 004001DCUnPackMe.004001DC
0040EB6C 004001DEUnPackMe.004001DE
0040EB70 00402F18UnPackMe.00402F18 //这里就是FSG的oep。
0040EB74 > 7C801D77kernel32.LoadLibraryA

------------------------------------------------------------
到00402F18去下硬件执行断点。运行到这断下。

00402F1855PUSHEBP//仔细观察,这里又不是程序的OEP。
00402F198BECMOV EBP, ESP
00402F1B83C4 F0 ADD ESP, -10
00402F1EB8 C02E4000 MOV EAX, 00402EC0
00402F23E8 D0EDFFFF CALL00401CF8
00402F28E8 83FDFFFF CALL00402CB0//跟进
00402F2DE8 56E6FFFF CALL00401588
00402F328BC0MOV EAX, EAX
00402F340000ADD BYTE PTR [EAX], AL
00402F360000ADD BYTE PTR [EAX], AL


-------------------------------------------------------------------
跟进后发现多个 VirtualAlloc,
00402CEA6A 00 PUSH0
00402CECE8 4FF1FFFF CALL00401E40; JMP to kernel32.VirtualAlloc
00402CF18945 FC MOV DWORD PTR [EBP-4], EAX


00402D4D6A 00 PUSH0
00402D4FE8 ECF0FFFF CALL00401E40; JMP to kernel32.VirtualAlloc
00402D548945 F8 MOV DWORD PTR [EBP-8], EAX


再有发现跑飞后重新载入程序时,正在运行的程序不退出。呵呵,是捆绑文件。
lordPE,查看。发现有两个进程。基址都是00400000,大小分别为F000、7000。
区域dump非OD载入的,另外一个进程。呵,这就是捆绑的程序。
实施了一个障眼法。
mycsy 发表于 2008-10-29 09:27
-----------------------------------------------------
吾爱破解脱壳练习----未知壳
PEID查壳FSG 2.0 -> bart/xt [Overlay]

00400154 >8725 60EB4000xchg dword ptr ds:[40EB60],esp//载入后停在这里
0040015A61 popad
0040015B94 xchg eax,esp
0040015C55 push ebp
0040015DA4 movs byte ptr es:[edi],byte ptr ds:[esi]
0040015EB6 80mov dh,80
00400160FF13 call dword ptr ds:[ebx]
00400162^ 73 F9jnb short UnPackMe.0040015D
0040016433C9 xor ecx,ecx
00400166FF13 call dword ptr ds:[ebx]
0040016873 16jnb short UnPackMe.00400180
0040016A33C0 xor eax,eax
0040016CFF13 call dword ptr ds:[ebx]
0040016E73 1Fjnb short UnPackMe.0040018F
00400170B6 80mov dh,80
0040017241 inc ecx
00400173B0 10mov al,10

-----------------------------------------------------
对比了以前的练习发现真的是FSG……但是明明提及到是未知
壳的……可见是至少是双层壳!……
先按照FSG的方法来下!
F8三步!看堆栈!

-----------------------------------------------------
0040EB64 004001E8UnPackMe.004001E8
0040EB68 004001DCUnPackMe.004001DC
0040EB6C 004001DEUnPackMe.004001DE
0040EB70 00402F18UnPackMe.00402F18 //反汇编跟随
0040EB74 > 7C801D77kernel32.LoadLibraryA
0040EB78 > 7C80ADC0kernel32.GetProcAddress
-----------------------------------------------------
00402F1800 db 00
00402F1900 db 00
00402F1A00 db 00
00402F1B00 db 00
00402F1C00 db 00
00402F1D00 db 00
00402F1E00 db 00
00402F1F00 db 00
00402F2000 db 00
00402F2100 db 00

の……到了一片荒芜之地……
从分析中删除
00402F180000 add byte ptr ds:[eax],al //F2 下断 F9起飞
00402F1A0000 add byte ptr ds:[eax],al
00402F1C0000 add byte ptr ds:[eax],al
00402F1E0000 add byte ptr ds:[eax],al
00402F200000 add byte ptr ds:[eax],al

变成这样……
00402F180000 add byte ptr ds:[eax],al //下个硬件断点 F9
-----------------------------------------------------
00402F1855 push ebp ; ntdll.7C920000 //到达这里也可以用单步的方法 其实这里不是OEP……-_-
00402F198BEC mov ebp,esp
00402F1B83C4 F0add esp,-10
00402F1EB8 C02E4000mov eax,UnPackMe.00402EC0
00402F23E8 D0EDFFFFcall UnPackMe.00401CF8
00402F28E8 83FDFFFFcall UnPackMe.00402CB0 //继续F8在此会运行! 当你跟进去以后你会发现很多 55push ebp //好多OEP……
00402F2DE8 56E6FFFFcall UnPackMe.00401588
00402F328BC0 mov eax,eax
-----------------------------------------------------
の……
00402F28E8 83FDFFFFcall UnPackMe.00402CB0 //下个硬件断后F8 居然还是运行了
用LORDPE看到的是两个进程……DUMP无效 使用PETOOLS
回头发现原来直接让程序运行就能脱此类捆绑壳……
自己还信誓旦旦的去脱FSG……汗死了!
-----------------------------------------------------
Dumped.exe
wesley 发表于 2008-10-29 09:53
OD载入运行用PETOOLS 直接转存运行起来的那个进程。。。。DUMP后 发现可以运行还是未加壳前的原程序。。。
傻人有傻福 发表于 2008-10-29 11:31
00400154 >8725 60EB4000 xchg ds:[40EB60],esp ; OD载入到这里
0040015A61popad
0040015B94xchg eax,esp
0040015C55push ebp
0040015DA4movs byte ptr es:[edi],byte >
0040015EB6 80 mov dh,80
00400160FF13call ds:[ebx]

看入口很像FSG的,往下拉一下:
004001C6FF53 10 call ds:[ebx+10] ;(kernel32.LoadLibraryA)
004001C995xchg eax,ebp
004001CA8B07mov eax,ds:[edi]
004001CC40inc eax
004001CD^ 78 F3 js short UnPackMe.004001C2
004001CF75 03 jnz short UnPackMe.004001D4
004001D1FF63 0C jmp ds:[ebx+C] ; 这里是关键
004001D450push eax
004001D555push ebp
004001D6FF53 14 call ds:[ebx+14] ;(kernel32.GetProcAddress)
004001D9ABstos dword ptr es:[edi]
004001DA^ EB EE jmp short UnPackMe.004001CA

上面的jmp ds:[ebx+C]跳到这里
00402F1855push ebp ; 来到这里
00402F198BECmov ebp,esp
00402F1B83C4 F0 add esp,-10
00402F1EB8 C02E4000 mov eax,UnPackMe.00402EC0
00402F23E8 D0EDFFFF call UnPackMe.00401CF8
00402F28E8 83FDFFFF call UnPackMe.00402CB0 ; 这里F8过后程序就跑起来了
00402F2DE8 56E6FFFF call UnPackMe.00401588

重新载入程序,奇怪的事情发生,UnPackMe还在?这意味着什么呢?我不太清楚,我觉得是壳在内存中
又放了一份程序,而且是没加壳的,如果我们把它DUMP出来能不能用呢?用LORDPE不能脱,换PE-TOOLS
可以脱,测试一下,不用IMPORTREC修复也是可以用的。
小糊涂虫 发表于 2008-10-29 11:47
这个壳好像谁发过了,,,,,
有点像FSG2.0的,来到00402f18,断下后,直接F9运行起来....
用PETOOLS脱壳.发现有两个进程 选下面的那个进程脱壳,OK
不用修复,直接可以运行.
fox2006 发表于 2008-10-29 13:42
1.先运行带壳程序。
2.打开Import REC,设置选项,如下:


3.选取带壳程序进程,看到OEP为1700,RAV为0,size为1000,现在主要是修复IAT了。
4.打开OD,载入带壳程序进程,看数据窗口,得到IAT的RAV为2000。


5,退出OD,重新运行带壳程序。用Import REC选取带壳程序进程,填入OEP:1700,rav:2000,size:1000,获取输入表。删除无效指针。
6,就用Import REC来脱壳吧,在指针上点击右键,如下步骤dump就OK了


7,dump后查壳为VC++


这伪装壳,在OD跟踪时候碰到了Delphi入口特征,就是找不到VC入口特征,头晕,期待高手教程。

unpackme_dump.rar
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 00:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表