新发的日常学习——IDA的入门使用,反编译so/dll文件(反编译神器)

时间:2024-10-25 15:22:18

文章目录

      • 一、前言
      • 二、IDA下载安装
      • 三、IDA使用
        • 1、编写
        • 2、将编译成so文件
        • 3、用IDA打开so文件
        • 4、找函数
      • 四、实战
      • 五、结束语

一、前言

之前一般是搞搞c#java的反编译,比较方便。如果是用C/C++写的dllso,用什么工具来反编译呢?最有名的应该是IDA了。

二、IDA下载安装

链接:/s/1NATDYzomBYiwrwdH6qBjUA
提取码:2dmy

IDA官网:/

三、IDA使用

1、编写

为了方便演示,我们先协议而简单的
代码如下

#include <>

int AddInt(int a, int b)
{
    return a + b;
}

void SayHello()
{
	printf("hello world");
}


int main()
{
	SayHello();
	int sum = AddInt(1, 5);
	printf("%d\n", sum);
	return 0;
}
2、将编译成so文件

然后使用ndk-build将其编译成.so文件
在这里插入图片描述
具体如何编译so文件,要用到ndk-build,可以参见我另一篇文章:/article/details/108642977
如果是编译成exe,可以使用gcc,参见我另一篇文章:
/article/details/109142964

3、用IDA打开so文件

现在,我们使用IDA反编译一下我们的这个
点击菜单File - Open
在这里插入图片描述
选择我们的,打开
在这里插入图片描述
点击OK
在这里插入图片描述
反编译成功,我们可以看到对应的汇编代码
在这里插入图片描述

4、找函数

因为我们在中有个main函数,我们在IDA左侧的Functions Windows中按Ctrl + F,查找main函数
在这里插入图片描述
双击main函数,可以看到对应的汇编代码
在这里插入图片描述
看汇编有点吃力的话,可以直接按F5转成伪代码(注意:伪代码不可全信,它与源码是有差异的)
在这里插入图片描述
从上的伪代码可以见到,调用了j_SayHello方法,我们的AddInt(1, 5);调用直接被优化成结果6了。
双击j_SayHello可以跳到函数定义里,里面调用了SayHello
在这里插入图片描述
继续跳到SayHello,可以看到调用了j_printf("hello world");
在这里插入图片描述
如果想切换会汇编视图,可以直接在上面的标签页中切换即可
在这里插入图片描述

四、实战

我们下载海王捕鱼的PC版(它是Unity做的),我们知道,Unity的C#代码会编译成,然后通过mono加载进内存中。
如果没有对做加密的话,可以直接使用反编译

ILSpy下载地址:/icsharpcode/ILSpy/releases

尝试了发现海王捕鱼对做了加密,那么他们肯定修改了mono的加载Dll的逻辑(mono_image_open_from_data_with_name方法)。

Unity防破解 —— 加密Dll与Key保护
:/lixiang-share/p/

我们找到海王捕鱼exe所在目录中找到
在这里插入图片描述
使用IDA打开,找到mono_image_open_from_data_with_name方法,发现了一个惊天秘密,解密密钥是:fuckyoutencent
在这里插入图片描述
看来,海王的程序员对腾讯怨念很深啊~

五、结束语

本文介绍的知识IDA最简单的用法,跟多高深的技巧,我会在后面的学习和使用中进行文章更新~