当前位置:首页 » DLL相关 » 正文

怎么样尽可能地分析出一个 dll 文件的有用信息?

1672 人参与  2016年01月28日 09:18  分类 : DLL相关  评论

基本上和分析可执行文件一样。有壳先脱壳,常见的壳,可以网上找找看脱壳机,不过很多脱壳机都内嵌病毒,使用的时候要小心。壳不常见,那就只能自己分析,手动脱壳,脱壳简单的简单死,麻烦的麻烦死,有时候生不如死,就不展开了。dll有可能是托管的,那就操起.NET Reflector或ILSpy反编译一下,幸运的话,代码就基本出来能看了,不幸运的,代码是混淆过的,生不如死,容我离开一会。回来发现不懂IL啊,改不动,装上reflexi插件,改的飞起。这时才想起来,我只是想提取个图标和图片而已,找到资源区,导出搞定。dll是原生的,对了,提取资源的话,ResHack足以。不行,我要破解,我想提取算法,那就找出江湖流传已久的免费神器odbg,发现耍不来,找来找去,还是上古神器IDA靠谱,可惜要钱,钱我给的起,奈何老婆不让给,怒而破解之,!@#$%^&,卒~~~。被救醒后,只能退而求其次,弄个已破的老版本耍耍,没想到中了CryptLocker,积累的代码,下载的书籍,包括1T的爱情动作片,全部转化为别人的资产,要求bitcoin赎取,¥¥……¥,悲伤过度,¥¥¥¥,卒~~~。上段为演绎的真实情节,总之伤心往事太多,楼主引以为鉴。有了IDA,就好说了,静态反编译,看看导出表,查查导入表,浏览下字符串表,寻找各种线索。如果是C++编译的代码,装个扫描RTTI的插件,如果编译时有开RTTI的话,可以找到很多类层次结构信息,慢慢的观察汇编,找些资料学习编译链接的知识,找出代码到汇编的常用pattern,反过来从汇编推回代码,然后从代码的意图推测出函数的功用,做好标注,回头再按自己的思路优化重整代码,尽管没办法完全恢复代码原样。遇到没办法理解反推的地方,就用顶楼的方法,或自己写个简单的exe,LoadLibrary,GetProcAddress动态调试下,当中又会碰到很多奇葩的难题,各种反调试措施呀,等等,想办法解决或绕过它们。就这样,日复一日,年复一年,慢慢的,慢慢的,把所有函数都标注出来,当然最后的结果就是

1、一般我会先看导入表和字符串表,根据这两个大致可以猜到这个程序的大部分功能比如导入表里有send、recv、sendto之类的函数,那多半会有网络操作;CreateProcess和CreatePipe、ReadFile、WriteFile同时出现,可能会反弹shell等等,字符串表也是同理。当然这个方法并不准确,完全可以不通过导入表,并且加密字符串来调用各种API,所以一般还要结合下面的步骤一起2、看导出表DllMain函数和ServiceMain函数是入口函数,dll被加载时就会自动调用的(ServiceMain是服务的入口函数)其他的导出函数分析完Dll的导出函数基本上就可以确定出一个DLL的功能了,但是同样可以不通过导出表去调用Dll中的函数,能不能调用一个函数的关键在于能不能找到这个函数的地址,导出表的作用就是帮助调用者找到内部函数的地址,所以完全可以自己实现一个方法去找内部函数的地址,比如我在一个函数头N个字节设计一个标记,调用时通过找这个标记就可以得到要调用的函数地址。3、动态调试这个就不解释了

打赏

本文链接:https://www.zhaodll.cn/postd38.html

<< 上一篇 下一篇 >>

Copyright www.zhaodll.cn Rights Reserved. 沪ICP备15055056号-1 沪公网安备 31011602001667号