好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 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
环境安装好以后,就可以开始了。
解压出smartdec的代码,如果是用github直接下载的,可能是smartdec这个文件 夹,如果是下载的压缩包,那么应该是smartdec-master.zip
解压后的结构如下:
3
doc目录,保存着要编译该项目的方法 ,使用cmake,我是没有使用过这个工具,所以就不用这个工具了,
在src目录下,是这样的结构
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
然后来到界面,勾选静态库
6
点击完成,那么可爱的解决方案就已经生成了,结果如下:
,
nc.cpp和nc.h不是我们需要的文件 ,我们删掉他们,
然后把core的代码加入nc这个工程
7
项目->显示所有文件,左边的文件结构就自动识别了当前工作目录下的所有目录
选择common,点击
8
,会卡住几秒,看你的电脑的配置,不同的配置会卡的时间不等。然后展开以后看到变成下面这样了。表示加入成功
9
按同样的方法依次加入core,其它文件暂时不用加入,
然后配置一下目录。,按下面配置(路径替换成自己的路径)
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
那么再编译一次,这次成功 了。但是有几个警告,如下:
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、添加所有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 个 ==========
等明天再来修正了。。
|
免费评分
-
查看全部评分
本帖被以下淘专辑推荐:
- · 学习及教程|主题: 1131, 订阅: 1123
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|