首页
社区
课程
招聘
[求助]请教一个upx壳的问题
发表于: 2014-12-18 16:31 8711

[求助]请教一个upx壳的问题

2014-12-18 16:31
8711
今天想学习调试某一个软件
查壳:upx 3.08

先直接用upxshell直接解压,顺利解压,但运行报错“应用程序正常初始化失败0xc000005”

那就手动dump,修复了附加数据,运行还是报错“应用程序正常初始化失败0xc000005”

对脱壳出来的程序调试了一下,发现在调用kernel32.ResumeThread时候出错,是因为程序的自校验吗(该程序有一堆自校验)?不对,应该还没起来。是否可以提示点思路

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 123
活跃值: (144)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
求个软件样本
2014-12-18 18:08
0
雪    币: 8201
活跃值: (2701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
以前碰到过,经fly神提示,输入库名字有点问题。
2014-12-18 18:42
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
“用LordPE打开其输入表,Kill掉一个KERNEL32.DLL”

是这么处理吗 ?这样岂不是没法定位这个dll文件了,尝试也没成功

上传样本,希望不会违规
上传的附件:
2014-12-22 09:38
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
今天认真看了一下 应该还是自校验的问题 修复IAT后还要认真单步一下代码
2014-12-22 17:32
0
雪    币: 8201
活跃值: (2701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用upx3.8.0.0 直接upx -d NetPiao.exe,你测试下
上传的附件:
2014-12-23 08:14
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我这里测试结果相同,需要修复一下iat
2014-12-23 08:40
0
雪    币: 264
活跃值: (119)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
巧了,我也在看这个NetPiao.exe,带着壳看了一下,程序会用CreateProcess创建一个挂起状态的子进程,然后用ZwUnmapViewOfSection卸载这个空间的数据,再用

VirtualAllocEx重新分配空间,然后WriteProcessMemory写入代码,最后用ResumeThread让子进程恢复运行,貌似叫做傀儡进程吧。
脱出来的文件在ResumeThread的时候会出错,还得修复某些地方。
楼主方便的话PM个联系方式,咱们一起研究。
2014-12-23 22:54
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
昨天脱壳调试了一下,想办法绕过了一些校验,想把傀儡进程dump出来,可惜没成功...

补充一下:dump错了,现在可以了
2014-12-24 08:52
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
上传今天最新版(2328)的程序dump,可以试试debug
上传的附件:
2014-12-24 14:05
0
雪    币: 396
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
这个问题在网友的提示下我解决了,我先看看你们的版本,然后再说解决方法。
2014-12-24 17:01
0
雪    币: 396
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
用LoadPe,部分转存新的进程,可以解决这个问题
方法:
当跟踪到ResumeThread让子进程恢复运行时,停在调用处,这个程序中是:
0040275A    FF15 3C104100   call dword ptr ds:[0x41103C]             ; kernel32.ResumeThread
这一行。
这时堆栈中有进程的信息:
0012E818   000000A8
0012E81C   000000A8  \hThread = 000000A8 (window)
0012E820   00000001
0012E824   009F0000
0012E828   00419120  netpiao.00419120
0012E82C   00400000  netpiao.00400000
0012E830   00000004
0012E834   009F0000
0012E838   0012EC00
0012E83C   000000A0
0012E840   000000A8
0012E844   00000208             ;这是新进程的ID,不懂的去看下进程结构体的资料,
0012E848   000003E4

LoadPE脱壳进程208
选择部分转存,地址当然是00400000,大小003E9000。
修复下区段,对齐下块,OK.
刚才测试成功了。
当然也可以区域转存。
其他的你懂的,哈哈。
2014-12-24 17:43
0
雪    币: 396
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
看来你跟得跟我一样辛苦,希望就在绝望中,这个壳就跟到kernel32.ResumeThread死,也是从kernel32.ResumeThread生。
2014-12-24 17:47
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我研究的没有你们深入,带壳跑到ResumeThread代码都是乱的,所以脱了壳dump,所以要绕过一些校验,过程有点傻...
2014-12-25 08:28
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
[QUOTE=reddiamond;1340036]用LoadPe,部分转存新的进程,可以解决这个问题
方法:
当跟踪到ResumeThread让子进程恢复运行时,停在调用处,这个程序中是:
0040275A    FF15 3C104100   call dword ptr ds:[0x41103C]             ; kernel32....[/QUOTE]
最新的2328版本,dump size变成3F0000啦!
2014-12-25 08:30
0
雪    币: 396
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
是的,你就是那边的楼主吧
2014-12-25 09:34
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
请问带壳跑的话怎么确定dump size=3e9000的?
2014-12-26 14:17
0
雪    币: 396
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
一个是在VirtualAllocEx中在,另一处是WriteProcessMemory,还有是就通过LordPE的区域转存可以确认
2014-12-28 12:19
0
游客
登录 | 注册 方可回帖
返回
//