首页
社区
课程
招聘
使用
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2014-2-20 10:53
0
[求助]各位大拿,软件有多个pushad和popad,怎么脱壳?
你说的很对。我以前一直觉得脱壳很神秘,两个完全不同的exe,怎么执行效果是一样的?一直无法理解,不过也没有特意去研究这方面的内容,更没有尝试去学习脱壳。不过我本身是搞软件开发的,汇编也学过,pe结构也有所了解,其实就差灵犀一点了。某次无聊,偶然看了一个手脱upx壳的教程,突然就感觉心中得到了什么灵感,立刻找了几个upx壳试了试,发现自己的想法是对的。以后再练脱压缩壳,基本上就是在练习熟练工具的操作,从此脱压缩壳就没有再遇到问题了。
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2014-2-13 11:17
0
[求助]如何知道壳运行完了
首先必须手工(貌似没有通用的自动方法)找到OEP。
如果这个壳不是霸道的,并且不检测调试标志的话,通常你可以找到进入OEP前的最后一处壳代码的位置,CreateProcess用DEBUG方式开启但暂停住,你的主程序修改其最后一处壳代码为int 3(相当于加软断点),并且用WaitForDebugEvent等待调试事件,当发现断下时刻就是你所修改的int 3时,你可以还原代码,打补丁写内存,然后DebugActiveProcessStop分离运行(可以MSDN查WaitForDebugEvent一系调试代码的写法);如果找不到最后一处壳代码,理论上可以用SetThreadContext加硬件断点,把dr0寄存器写成OEP应该可以断下(本人对硬件断点的原理不太熟,可能有错漏)。
如果壳反调试,那么不太好办。不过既然你可以找到OEP,那你自然可以找到它正常情况下,所调用的第一个API,你可以在最初启动程序之前,把这个API的入口代码偷天换日一下,比如先判断OEP指令是否已经还原以及本函数返回地址是否是OEP执行之后再调用本函数应该返回的位置。如果发现不是的话,那么让他继续正常运行,如果是的话,让它进入死循环。主程序做完手脚后,通过Sleep100毫秒左右检测一次目标程序,将其挂起,GetThreadContext判断它EIP是否在死循环的位置,如果不是的话,继续Sleep,如果是的话,还原该API入口,SetThreadContext将EIP设置回该API入口。由于此时目标程序一个API都没来得及调用,所以“此时WriteProcessMemory”和“在OEP写”比较起来几乎是没有区别的。这样也变相完成了任务。
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2013-10-28 13:30
0
[求助]不完全读懂汇编代码,能破解吗?
这怎么可能?他肯定做了很多尝试,最终才得出这个跳转应该NOP掉的结论。比如某个地方的代码不希望被执行,那么就会在那里加断点,断下后再返回,直到找到为什么会进入这段代码的那个分支跳转,然后直接JMP或者NOP掉。即使这个人的技术再牛B,也不可能光看一眼就知道结果,除非是某种特征非常明显的壳代码。
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2013-10-25 15:47
0
[建议]为啥没人逆向 link.exe rc.exe lib.exe 等几个相关文件
逆向一小段算法,可以理解,可以实践。但是逆向整个东西?你嫌命长啊?
就算给你源代码,让你从完全看懂理解直到能自己写一个的程度,都不知道要花多少时间!?
逆向这个,然后要达到能把代码完全还原,这简直是浪费你宝贵的生命啊!!!
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2013-10-23 15:56
0
[求助]如何HOOK进程降低cpu占用率?
这个事情我以前干过,Falcom的游戏它的伪代码流程是这样的:
while (1)
{
	if (PeekMessage(...))
	{
		TranslateMessage(...);
		DispatchMessage(...);
	}
}

结果很多时候Peek不到消息,就在傻傻的死循环,于是OD给它改了下,改成
while (1)
{
	if (PeekMessage(...))
	{
		TranslateMessage(...);
		DispatchMessage(...);
	}
	else
	{
		Sleep(1);
	}
}

不过这方法要根据实际情况对症下药,如果不是这个原因,那就另当别论了
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2013-10-23 15:40
0
[求助]CHtmlView::Navigate对应的win32api是什么啊?
还有使用前记得初始化OLE环境,否则OLE对象可能会创建不出来。如果你一定要研究这个,难点在于自己继承并实现一个IOleClientSite*,我当初是用了Hook的手段调试MFC程序,印象中是apihook挂QueryInterface,返回一个自己假IOleClientSite对象,内部调用真IOleClientSite的接口,在假IOleClientSite对象的所有接口中进行打印参数等等,这样可以获知哪些接口有用,哪些没用直接返回E_NOTIMPL,哪些接口即使有用也只是返回E_NOTIMPL等等,另外由于hook了QueryInterface,还可以知道另外需要IOleInPlaceSite、IOleInPlaceFrame、IDocHostUIHandler,因为它们曾经被QueryInterface过,都需要自己实现,因此一起继承实现,再然后还要对它们用假接口替换做桥,也得到其接口的实际使用方式等。
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2013-10-23 15:25
0
[求助]CHtmlView::Navigate对应的win32api是什么啊?
这玩意儿,自己写非常的麻烦,我倒是写过,确实非常的麻烦,没有API可以直接解决,要用COM。
如果你要自己实现,必须要求你有比较强的DEBUG技能,知道怎么跟踪MFC实现并自己整理思路。
我只能把大致思路和概念说下:
1、需要三个东西,IOleClientSite*负责显示空间,IStorage*负责存储空间,IOleObject*通用Ole对象
2、调用StgCreateDocfile可得到一个IStorage*存储空间,而显示空间貌似没有办法直接创建,需要自己继承IOleClientSite并实现其所需的几个接口(实现时需要同时继承IOleClientSite、IOleInPlaceSite、IOleInPlaceFrame、IDocHostUIHandler,但某些接口可以不实现直接返回E_NOTIMPL),继承并实现后可以得到一个IOleClientSite*显示空间,然后以IOleClientSite*和IStorage*做为参数,调用OleCreate,第一个参数填CLSID_WebBrowser,第二个参数填IID_IOleObject,这样可以得到一个WebBrowser的OLE对象,如果是内嵌式的不需要菜单状态栏还需要IOleObject::DoVerb一下,如果需要事件还要再ConnectToConnectionPoint,第二个参数填DIID_DWebBrowserEvents2。
3、用IOleObject*进行QueryInterface参数填IID_IWebBrowser2得到一个IWebBrowser2接口,最后调IWebBrowser2::Navigate完成任务。
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2013-2-27 16:15
0
[求助]C#的可执行文件的加载过程貌似很特别啊?
大致找到原因了,和目录里面的COM有关,把COM抹掉可以运行起来。但是抹掉COM就没有版本信息,然后.NET友好的罢工了,无法完成偷梁换柱的任务。
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2012-3-29 13:31
0
[讨论]终于还是被脱壳的骗子骗了
来晚了,好玩的事情都过去了,没真相了啊!
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2012-3-28 09:28
0
[求助]一个神奇的程序,可以直接运行,但OD不能加载
[QUOTE=柔情似水;1052878]这MD5校验器的PE头被修改过了,请问怎么改回来啊?谢谢 MD5校验器.rar[/QUOTE]

这个Exe的DOS头和PE头糅合在一起,应该是没有工具自动分离开了。但是不同的Exe的DOS头和PE头格式都相差不大,找个Exe文件抄一段,手工修复就好了。附件是修复好的dump,另外送一张PE头格式的详解图(出处已经不知道了)。
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2011-12-3 11:08
0
[求助]为什么这个无壳的DLL看起来这么像有壳的?
我终于知道了,原来一切都是个误会
我这个OD,不知道是哪个设置不对还是怎么回事,一开始停在EP处时,从栈里面看到iReason参数是2,也就是DLL_THREAD_ATTACH,但是那个是1的DLL_PROCESS_ATTACH却也没有断下来。
后来选择“中断于新DLL模块加载”,终于勉强可以在DLL_PROCESS_ATTACH时刻断下,往下跟了几步就是0x100018ae的sub。
因为一开始总是断在DLL_THREAD_ATTACH时刻,但是我却误以为是DLL_PROCESS_ATTACH,所以就觉得这东西没壳了,实际上确实是有一层很薄的壳。
不过奇怪的是加载其他DLL的时候,都是在DLL_PROCESS_ATTACH断下,不知道为什么这个DLL怎么会把这第一次断下错过了。
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2011-12-3 10:29
0
[求助]为什么这个无壳的DLL看起来这么像有壳的?
我想我还可以换个问法,我用OD加载Install.dll后,停在0x1000177c这个地址,而这个地址就是PE信息头所指的模块入口点,而这时候0x100018ae的sub早已经执行过了。
不过我现在回看了您前几楼的回复,貌似您加载这个DLL后最初并不是停在这个地址,而且那时候0x100018ae的sub也还没执行,这是怎么回事?是我哪里没设置好么?
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2011-12-3 10:17
0
[求助]为什么这个无壳的DLL看起来这么像有壳的?
通过比较前后两个文件,我找到大致原因,关键是0x100018ae这里的sub dword ptr [eax], 6801293E,把后面的代码全部都减掉了这个数值。但是你改了后,这段被nop了,后面的代码也已经是减掉以后的结果。
不过我还是有个问题要请教下,在这里加软硬断点都没用,断不下来。改int3可以断下,并且确定这处代码是在EP之前被调用的,但是这个DLL没有tls之类的东西,什么代码会在进入EP之前被执行呢?
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2011-12-3 09:55
0
[求助]为什么这个无壳的DLL看起来这么像有壳的?
[QUOTE=nfgfgo;1025888]改了。
Install_.rar[/QUOTE]

请问,您是怎么做的?看起来不像是脱壳后再改,因为一旦dump至少要1.07M,你这个还是1.04M。而且我用UE比较后,发现文件前后变动很大,并不是只修改了几个字节。如果用OD修改指令后,进行“复制到可执行文件”结果应该是悲剧的,那么您是用什么工具改的?还有这个DLL原本是怎么回事,是PE文件内置的加密格式么(文件数据和加载后数据不同)?
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2011-12-2 22:50
0
[求助]为什么这个无壳的DLL看起来这么像有壳的?
既然大哥您听不懂我说什么,那么算了,多谢您路过……
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2011-12-2 15:06
0
[求助]为什么这个无壳的DLL看起来这么像有壳的?
确实是易语言的,不过大哥,请问你怎么解释0x10108793这个地址的内容为什么在最初就可见了?就算这部分是壳代码,那应该也可以修改壳代码保存啊,但是实际上你也做不到…
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2011-12-1 13:47
0
[求助]为什么这个无壳的DLL看起来这么像有壳的?
我这里下载没问题,可能是你当时的网络或者浏览器的问题吧
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wzanthony 2011-12-1 09:01
0
[求助]为什么这个无壳的DLL看起来这么像有壳的?
这个只是入口点看起来有点怪而已,接下来并不是解开的代码。当程序停在EP处时,0x10108793处(0x10108793不是EP,请不要误会)的代码已经可见,而且0x10108793并不是壳的代码,所以按理说应该是算无壳的。而且就算0x10108793是壳的代码,那也应该可以修改壳本身的代码并保存,但实际上这样修改后保存,下次载入后的该地址内容也不正确(假设修改了6个字节,那么这6个字节的内容会不对,但其他部分的内容不变,就像是它按字节做了什么变换似的)。
精华数
RANk
359
雪币
41
活跃值
关注数
粉丝数
0
课程经验
0
学习收益
0
学习时长
基本信息
  能力排名: No.4360
  等    级: LV3
活跃值  活跃值:活跃值
  在线值:
  浏览人数:483
  最近活跃:----
  注册时间:2008-03-15
勋章
能力值

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册