首页
社区
课程
招聘
[原创]逆向360加固等dex被隐藏的APK
2015-3-5 17:41 89876

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

2015-3-5 17:41
89876
如果遇到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();
            }


        }

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (56)
雪    币: 341
活跃值: (133)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
地狱怪客 2 2015-3-5 18:11
2
0
来看看。。
雪    币: 2491
活跃值: (2657)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
热咖啡 2015-3-5 18:50
3
0
很强,收藏。
雪    币: 576
活跃值: (1359)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
我是土匪 4 2015-3-5 18:52
4
0
其实核心就是一条命令:gcore
雪    币: 89
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whoRyou 2015-3-5 21:52
5
0
收藏,得空去尝试下,多谢分享。
雪    币: 163
活跃值: (1288)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学编程 1 2015-3-5 22:59
6
0
这个gdb是否有做特殊处理,还是和系统一样?有些情况下gcore会出错。
DumpAllDex.exe不错
雪    币: 19
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
cejay 2015-3-6 09:31
7
0
不要使用真机gcore,用虚拟机试试
雪    币: 18
活跃值: (430)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
zpsemo 2015-3-9 13:32
8
0
不错 试试
雪    币: 4
活跃值: (726)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
淡然出尘 2015-3-11 11:05
9
0
额 我没成功..
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
Ericky 6 2015-3-11 13:04
10
0
可以用真机呀。。给力~谢谢分享。后面的脚本能自动化反编译就更nice了
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
Ericky 6 2015-3-11 13:06
11
0
关键是gdb有做特殊处理么?能否指点一下呢?大大的Thanks
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
Ericky 6 2015-3-11 13:07
12
0
是gcore不行就找中间的pid 继续gcore么?::
雪    币: 249
活跃值: (135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
无心问世 2015-3-11 20:25
13
0
mark
雪    币: 121
活跃值: (1197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vVv一 2015-3-11 20:45
14
0
试了下,弄出来的dex好多smali文件的方法被隐藏了,得解密吧~
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jieniruyan 2015-3-12 14:00
15
0
最近有几天没学了,有点懈怠~
雪    币: 268
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小豆芽 2015-3-17 06:38
16
0
mark
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LIwianwpIO 2015-3-19 09:40
17
0
很不错,收藏学习
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2015-3-20 21:33
18
0
这内容并不多,集成起来不好?
还有就是有些情况内存里的DEX是不规范的,这就不好了
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小目 2015-3-27 08:13
19
0
尝试不成功,不知道哪里出问题了。谢谢楼主思路 。
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
logsun 2015-3-27 13:34
20
0
我也尝试了!也没有成功!
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ztxb 2015-3-30 02:40
21
0
好强.收藏一下.以后看.
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
曾经的泪 2015-3-30 14:00
22
0
学习了!!谢谢楼主
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
曾经的泪 2015-4-1 12:24
23
0
楼主,,gdb连接接不上咋办,
雪    币: 20
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xuyahui 2015-4-13 12:48
24
0
mark
雪    币: 244
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ShadoWWinL 2015-4-16 22:15
25
0
唉。360以前so和dex都搞过。可惜现在转行了。多浪费了。
游客
登录 | 注册 方可回帖
返回