吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23480|回复: 27
收起左侧

[调试逆向] 编译ida反编译插件F4(像F5)、

  [复制链接]
anywhereyang 发表于 2018-7-4 22:07
本帖最后由 anywhereyang 于 2018-7-8 11:42 编辑

第一次在吾爱破解发贴,本贴内容主要分享一下IDA反编译插件的编写流程,先上个结果吧,有兴趣的可以看一下,有需要了解的可以回复一下,你们的支持是我更新下去的动力。ps:如果都没兴趣的话我就不更新了
以下是汇编代码(自定义架构),以下是我自己写的ida处理器得到的反汇编代码(关于ida处理器编写和加载器的编写,如果有需要了解的朋友也可以和我一起交流)

环境:
vs2013

QT4.8.7 :http://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.zip

qt-vs-addin-1.2.5.exe : http://download.qt.io/archive/vsaddin/qt-vs-addin-1.2.5.exe
IDA6.8(百度下载)
IDASDK6.8(百度下载)
boost库,我使用的是1.66的

smartdec源代码:(x32dbg中的反编译插件snowman,就是基于这个框架更改的)
https://github.com/smartdec/smartdec

安装环境:
1、安装QT4.8.7,安装直接添好路径以后,安装就行了
2、安装vs2013,已安装的可以跳过,vs2010也可以,
3、安装qt-vs-addin-1.2.5.exe。  建议按照这个顺序安装,可以保证qtvs插件能识别到vs和qt
4、编译boost库,
打开vs2013的命令行,
cd E:\SVN_Pre\toolLib\boost_1_66_0

bjam stage --toolset=msvc-12.0 --without-graph --without-graph_parallel --stagedir="E:\SVN_Pre\toolLib\boost_1_66_0\bin\vc12" link=static runtime-link=shared runtime-link=static threading=multi debug release  

这个需要很长一段时间 ,视你电脑配置,可能时间在20分钟-4个小时


安装好以后,打开vs2013,
[url=]1.png[/url]
查看是否识别到了版 本,如果没有识别到,可以手动添加

2

2


环境安装好以后,就可以开始了。

解压出smartdec的代码,如果是用github直接下载的,可能是smartdec这个文件 夹,如果是下载的压缩包,那么应该是smartdec-master.zip

解压后的结构如下:

3

3



doc目录,保存着要编译该项目的方法 ,使用cmake,我是没有使用过这个工具,所以就不用这个工具了,


在src目录下,是这样的结构

4

4

ida-plugin,即ida插件,编译这个工程就能像ida f5一样使用了。当然前提是你已经反汇编完成了需要的汇编代码,
nc,是整个反编译的核心,
nocode是一个命令行的反编译工具
smartdec是一个带界面的反编译工具
3rd-party,第3方库


,那么我们是不是可以就立即编译了呢,然后就可以开心的使用f4了呢,,实现不是的,我们得先配置qt4.8.7。(这一步相当重要,否则能正常编译,但是无法链接到ida的sdk。这个坑也是我花了几天才找到原因的)
,那么怎么样配置呢,我还是喜欢抄别的人文档,抄出来的结果如下:
1)首先在这里获得Qt 4.8.4的二进制构建(234mb):http
//download.qt.io/archive/qt/4.8/4.8.4/qt-win-opensource-4.8.4-vs2010。可执行程序2)安装它。通常它会转到“C:\ Qt”。
不要构建,只需安装它。3)将您的开始菜单调至“Qt by Digia v4.8.4 ..”并打开“Qt 4.8.4命令提示符”。4)在IDA设置中,QT命名空间环境用于避免IDA SDK中的一些冲突与qstrlen()冲突函数一起
运行。在此控制台中运行:
configure -debug-and-release -platform win32-msvc2010 -no-qt3support -qtnamespace QT
选择'o'开源选项和'y'到许可协议完成该过程。这就是你现在需要做的一切。您可以运行“nmake”来构建,但您不需要也可能不想。
重建整个文件需要几个小时,文件夹的大小将增加到几千兆字节。只需关闭控制台即可完成。

那么这么配置以后,就可以正式的踏上编译的道路

1、编译核心库

首先建一个解决方案:

5

5


然后来到界面,勾选静态库

6

6

点击完成,那么可爱的解决方案就已经生成了,结果如下:
,
nc.cpp和nc.h不是我们需要的文件 ,我们删掉他们,
然后把core的代码加入nc这个工程

7

7

项目->显示所有文件,左边的文件结构就自动识别了当前工作目录下的所有目录

选择common,点击

8

8

,会卡住几秒,看你的电脑的配置,不同的配置会卡的时间不等。然后展开以后看到变成下面这样了。表示加入成功

9

9



按同样的方法依次加入core,其它文件暂时不用加入,
然后配置一下目录。,按下面配置(路径替换成自己的路径)

10

10


修改src/nc/config.h.in为config.h,然后注释掉config.h中33行、36行、39行的代码
在预处理器添加 QT_NAMESPACE=QT;QT_NO_DEBUG;  
那么是时候生成一波了。。先编译一下nc这个工程吧
,看到一个错误,
1>core\mangling\MsvcDemangler.cpp(26): fatal error C1083: 无法打开包括文件: “undname/undname.h”: No such file or directory
双击跳转到MsvcDemangler.cpp,注释掉26行,和35-38行。

11

11


那么再编译一次,这次成功 了。但是有几个警告,如下:

1>  MsvcDemangler.cpp
1>  正在生成代码...
1>Debug\Statement.obj : warning LNK4042: 对象被多次指定;已忽略多余的指定
1>Debug\Types.obj : warning LNK4042: 对象被多次指定;已忽略多余的指定
1>  nc.vcxproj -> E:\SVN_Pre\GitHub\smartdec-master\src\nc\Win32\Debug\nc.lib
========== 生成:  成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========


接着2018/7/5号更新
从警告可以看出,有types.cpp和Statement.cpp冲突,那么需要处理掉这个冲突,可以直接把冲突的cpp和.h的名字改掉,然后改掉引即可,
我更改了nc/core/likec/Statement到_Statement。然后编译一下,很多错误。挨个把错误处理了吧。
我更改了nc/core/likec/types到_types。然后编译一下,很多错误。挨个把错误处理了吧。

编译完成以后,选择重新生成一次,这次没有任何错误,,核心库已经编好了。



2、编译ui库
同样的建立gui库,删掉gui.cpp和gui.h,
1.png

1、添加所有gui文件进去
2、复制nc项目的包含目录到gui工程的包含目录
3、预处理器修改成UNICODE;WIN32;QT_LIB;QT_CORE_LIB;QT_GUI_LIB;GUI_LIB;QT_NAMESPACE=QT;QT_NO_DEBUG;%(PreprocessorDefinitions)
附加目录修改成 .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;%(AdditionalIncludeDirectories)
然后编译吧,有2个错误,是刚才修改_Statement引起的,修改成#include <nc/core/likec/_Statement.h>即可


再编译一次,编译成功

1>  正在生成代码...
1>  gui.vcxproj -> E:\SVN_Pre\GitHub\smartdec-master\src\nc\Win32\Debug\gui.lib
========== 全部重新生成:  成功 1 个,失败 0 个,跳过 0 个 ==========

3、编译ida插件

按刚才同样的方法 把ida-plugin加入到解决方案中
1、并修改附加目录为.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories)
2、修改预处理器定义为UNICODE;WIN32;__NT__;__IDP__;QT_DLL;QT_GUI_LIB;QT_CORE_LIB;IDA_PLUGIN_LIB;QT_NAMESPACE=QT;QT_NO_DEBUG;%(PreprocessorDefinitions)
3、vc++包含目录 为E:\SVN_Pre\toolLib\boost_1_66_0;E:\SVN_Pre\GitHub\smartdec\src;E:\SVN_Pre\Analyzer\IDAPlug\SDK\idasdk68\include;$(IncludePath)
4、vc++库目录为E:\SVN_Pre\Analyzer\IDAPlug\SDK\idasdk68\lib\x86_win_vc_32;E:\SVN_Pre\Analyzer\IDAPlug\SDK\idasdk68\lib\x86_win_qt;$(LibraryPath)、
5、链接器->输入->附加依赖项 :nc.lib;gui.lib;ida.lib;QtCore4.lib;QtGui4.lib;%(AdditionalDependencies)
6、链接器-常规-附加库目录 :..\Build\Out\$(Configuration);E:\SVN_Pre\Analyzer\IDAPlug\SDK\idasdk68\lib\x86_win_qt

并修改gui和nc项目属性
输出目录为..\..\Build\Out\$(Configuration)\
中间目录..\..\Build\Imm\$(ProjectName)\$(Configuration)\

8、修改项目依赖项, 使ida-plugin依赖gui、nc

编译一下,发现错误,把GitSHA1.cpp.in修改成GitSHA1.cpp。然后加入工程

注释掉module.cpp中61-69行。
注释掉ParserRepository.cpp中41-42行。

重新生成。居然还有一个错误。。
1>SmartDecPlugin.obj : error LNK2019: 无法解析的外部符号 "public: class nc::core::arch::Architecture * __thiscall nc::core::Module::setArchitecture(class QT::QString const &)" (?setArchitecture@Module@core@nc@@QAEPAVArchitecture@arch@23@ABVQString@QT@@@Z),该符号在函数 "private: class std::unique_ptr<class nc::gui::Project,struct std::default_delete<class nc::gui::Project> > __thiscall nc::ida::SmartDecPlugin::createIdaProject(void)const " (?createIdaProject@SmartDecPlugin@ida@nc@@ABE?AV?$unique_ptr@VProject@gui@nc@@U?$default_delete@VProject@gui@nc@@@std@@@std@@XZ) 中被引用
1>E:\SVN_Pre\GitHub\smartdec-master\src\nc\Win32\Debug\\ida-plugin.dll : fatal error LNK1120: 1 个无法解析的外部命令
========== 生成:  成功 0 个,失败 1 个,最新 2 个,跳过 0 个 ==========

等明天再来修正了。。


免费评分

参与人数 4吾爱币 +6 热心值 +4 收起 理由
smile1110 + 3 + 1 我很赞同!
mutou666 + 1 + 1 热心回复!
zycdmax + 1 + 1 用心讨论,共获提升!
evea + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| anywhereyang 发表于 2018-7-8 11:41 来自手机
A-new 发表于 2018-7-7 12:21
编写,编译,虽然只是一字之差,但是区别是很大的,建议楼主改下标题

本来是还有后续的,按你这么一说,我改下标题就可以结束了,多谢提醒

点评

我只说这篇帖子,有后续,继续撒,或者这个改为前传  详情 回复 发表于 2018-7-10 12:52
A-new 发表于 2018-7-10 12:52
anywhereyang 发表于 2018-7-8 11:41
本来是还有后续的,按你这么一说,我改下标题就可以结束了,多谢提醒

我只说这篇帖子,有后续,继续撒,或者这个改为前传
Hmily 发表于 2018-7-5 10:20
soyo136 发表于 2018-7-5 10:44
学习一下,感谢楼主分享自己的经验
evea 发表于 2018-7-5 11:00
本帖最后由 evea 于 2018-7-5 11:29 编辑

厉害!学习了.
 楼主| anywhereyang 发表于 2018-7-5 11:22
为了避免潜在的法律风险,本人去掉了汇编代码部分,只分享如何编写反编译插件,不针对任何产品

点评

图片编辑下,全不显示。  详情 回复 发表于 2018-7-5 11:25
Hmily 发表于 2018-7-5 11:25
anywhereyang 发表于 2018-7-5 11:22
为了避免潜在的法律风险,本人去掉了汇编代码部分,只分享如何编写反编译插件,不针对任何产品

图片编辑下,全不显示。
 楼主| anywhereyang 发表于 2018-7-5 11:35
Hmily 发表于 2018-7-5 11:25
图片编辑下,全不显示。

晚上下班回去才能处理了
Anakin 发表于 2018-7-5 16:46
这个我一定要学习  不要拦着我 谢谢楼主  
扯淡、、 发表于 2018-7-5 20:16
这个我一定要学习  不要拦着我 谢谢楼主  
BY丶显示 发表于 2018-7-5 22:01
是不错,等楼主修复图片。谢谢分享。期待。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-22 07:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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