-
-
[原创]<记录对某壳的分析(会持续补充,欢迎讨论)>
-
发表于: 2017-5-13 17:47 2993
-
<记录对某壳的分析(会持续补充,欢迎讨论)>
首先,该程序区段共有五个,分别为 .text,.rdata,.data,.trace,.rsrc
乍一看,没什么特别之处,即使有一个.trace区段。但是里面也没有什么有用信息,peid显示 Microsoft Visual C++ 6.0 - 8.0 [Overlay] *
,EP位于.text区段
ida载入运行却会提示“必要的安全模块未加载xxxx”,然后自动退出。所以可能是有反调试。
于是Ida静态。看到头部
找不到什么有用的信息,流程图也比较庞大
只能大概看到,有两条线的出口。
继续梳理代码,发现如下部分
程序通过PEB对imagebaseaddr对dos头部和pe头部进行简单的字符串比较,而且代码比较规律性。这种代码很多。个人对此表示疑问。。莫非vc程序都会开始就各种获取peb然后校验pe?
继续往下看,我们只需要。顺着正常流程往下看。
各种对自身内存中pe结构的校验。只要发现不符合正常pe,就直接恢复现场,然后retn结束流程。
这种地方有很多。但是大体来说。不需要去关注他。因为仅仅是对自身合法性的校验,这些代码没有任何anti-debug的迹象。
其中还使用oemid字段,xor计算出了一个数字
0x021df000,看这个数字,有些像地址,或者说缓冲区。但是里面的字节,没什么特殊,基本全是0;
程序对这个缓冲区进行直观的合法性检查以后,开始使用它
仅仅是对其中的一些偏移位,进行一些判断,但是不管判断与否,不影响执行效果。
这个buffer具体用途不清楚,继续让他运行。
到这里。这两个函数是我命名的,之所以用这么个名字,是因为走到这里,基本最一开始的ida流程图快走完了。这两个函数,连续调用两次。也比较可疑。
不妨先试试进入该函数内部。
流程很吓人(尽管有一个出口点)。但是其实代码并不算太复杂,简单来说。就是根据他的参数,有三种情况,0,1,2,有且仅有这三种,否则的话,该函数草草恢复环境,然后退出。
我们之前第一次调用push 0,所以这里只需要看他为0的走向。
这里,再次使用刚才的缓冲区.0x21df000,似乎是要对他进行一些填充,不管他。但是在他附近(表达的不好,确切来说。是紧随其后),看到了这些东西。
,当时问了VV,他说这是openssl,有各种加密解密算法,什么md4,md5,rsa都要用。不懂这个,于是继续往下看代码。
接下来,对于这个buffer,有很多的操作,循环,那些代码。下次再分析(正在进行中)。走到这里。看到了个有意思的东西
这里通过peb取得了ProcesHeap.是要做什么呢。。。感觉会是个坑调试器的东西,
但是,不需要管他,继续往下看。
这里,用过ecx,调用了RtlAllocateHeap。似乎是想要申请内存,但是。就是这个ecx,居然还要经过一系列的运算得来,现在说他没壳,都有点不敢相信了。还是text区段里面,看来是修改过了的壳。虽然申请了内存。但是并没有着急使用。而且,接下来的代码,很多的jmp乱序(清理乱序的部分,后面会写),
一直走到这里,发现似乎调用了什么库,1.2.2,不知道是什么版本的东西,以后再分析,(未完待续)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课