欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]逆向360加固等dex被隐藏的APK

[原创]逆向360加固等dex被隐藏的APK

如果遇到apk中的lib文件夹中是这样的

基本没有dex文件可以反编译,这中的dex文件一般都是加密混淆压缩后放在so中啦。
但是软件要想运行就需要解出dex字节码然后加载到手机内存中,这样就可以在软件运行过程中把dex提取出来再使用相应的软件反编译成smail啦,接着就是转成java。
好啦,第一次发帖子,以下就是干货。
首先下载附件中的
gdb.7z.001.rar (2.00 MB)  
gdb.7z.002.rar (1.21 MB)
把这两个文件的后缀名去掉使用7zip解压出来二进制文件gdb (大约13MB)
打开安卓虚拟机,把需要逆向的加壳软件安装的虚拟机中,然后启动APK。
1、使用ADB把gdb push到手机中
adb push /home/down/gdb /data/local/tmp/gdb
2、找到需要逆向的apk对应linux的进程pid
adb 中执行
adb shell
top
会显示手机中全部的进程,然后找到进程名字为apk包名的pid (在此假设pid为 482)
3、赋予gdb权限(依次执行以下命令)
adb shell
su
cd /data/local/tmp/
chmod 777 gdb
4、dump进程482的内存
./gdb --pid 482
此时进入了gdb模式
这个时候输入 gcore 会dump到当前目录 /data/local/tmp/core.482
把这个core.482的文件放到安装了.net 3.5 的电脑上(win7默认是可以得)
比如放到以下位置
D:\core.482
5、下载附件中的 DumpAllDEX.7z 解压出文件 DumpAllDEX.exe
运行

就会把所有的dex文件提取到D:\core.482.dex 文件夹中。
6、逐个反编译提取出来的dex文件,直到找到你要逆向的软件dex。这个时候就可以开开心心的转成java看源码啦。
最近做了个微信公众号,要是有觉得这个文章有用的朋友,谢谢关注下呀

DumpAllDEX.exe 为C#写的,源码如下:


 static void Main(string[] args)

        {

        REBEGIN:

            Console.WriteLine("请输入gcore出来的文件路径:");

            string filepath = Console.ReadLine();

            if (!File.Exists(filepath))

            {

                Console.WriteLine("指定的文件不存在,请输入正确的文件路径\r\n");

                goto REBEGIN;

            }

            new DirectoryInfo(filepath + ".dex").Create();

            FileStream fs = new FileStream(filepath, FileMode.Open);

            long flen = fs.Length;

            BinaryReader br = new BinaryReader(fs);

            byte[] bs = br.ReadBytes((int)flen);

            fs.Close();

            int bsl = bs.Length;

            for (int i = 0; i < bsl - 100; i++)

            {

                if (bs[i] == 'd' && bs[i + 1] == 'e' && bs[i + 2] == 'x' && bs[i + 3] == 10 && bs[i + 4] == '0' && bs[i + 5] == '3' && bs[i + 6] == '5')

                {

                    string a1 = bs[i + 35].ToString("x2");

                    string a2 = bs[i + 34].ToString("x2");

                    string a3 = bs[i + 33].ToString("x2");

                    string a4 = bs[i + 32].ToString("x2");

                    string hexlen = a1 + a2 + a3 + a4;

                    int dexlength = Int32.Parse(hexlen, System.Globalization.NumberStyles.HexNumber);

                    byte[] dex_tmp = new byte[dexlength];

                    int h = 0;

                    for (int j = i; j < (i + dexlength); j++)

                    {

                        dex_tmp[h++] = bs[j];

                    }

                    File.WriteAllBytes(filepath + ".dex\\" + i + ".dex", dex_tmp);

                }

            }

            Console.WriteLine("所有的DEX文件已经输出到文件夹" + filepath + ".dex\\");

            while (true)

            {

                Console.Read();

            }

        }

上传的附件 1.png
gdb.7z.001.rar
gdb.7z.002.rar
DumpAllDEX.7z
2.png
qrcode_for_gh_cfe9df33f4cf_258.jpg

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功