吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3670|回复: 1
收起左侧

[会员申请] 申请会员ID: hx71037

[复制链接]
吾爱游客  发表于 2017-3-25 09:57

-------------------------------------------------------------------------------------

1、申请ID:hx71037

2、个人邮箱:695876649@qq.com

3、文章:爱加密脱壳分析

-------------------------------------------------------------------------------------

文件名称:久秒名片赞系统
包名:android.support.v8大小: 1497829 bytesMD5:  8123AC1150B47EF53507EC2360164E3BSHA1: 958B1E341C72DBCF52863C570B77C71A862987B1描述:爱加密有反调试功能,无法直接给关键函数下断点,所以      只能单步跟踪到它检测反调试的地方修改比较值,从而跳      过反调试。壳程序通过读取进程文件(/proc/uid/status)      中的racerPid属性来确认自己是否被调试,该属性如果不      为0则说明程序是被调试状态。如果要获取该文件的值那么      必然是有读写操作的,通过在读写函数地方下断点,就可以      修改它的值从而骗过反调试。即只要在fopen和fgets处下断      点单步跟踪就可以了(函数在libc.so)。调试准备:1)   准备调试环境安装IDA Pro 服务器: adb push android_server /data/local/tmp设置服务器运行权限:cd data/local/tmp/ chmod 777 android_server运行服务:adb shell & cd /data/local/tmp &./android_server设置端口转发:adb forward tcp:23946 tcp:239462)  调试运行adb shell amstart -D -n android.support.v8/android.support.v7.q4488700153)  IDA 附加进程调试      Debugger-> Attach        Ctrl+F  搜索 android.support.v84)  函数下断点     Modules中搜索 libc.so     给fopen,fgets下断点     Modules中搜索 libdvm.so     给dvmDexFileOpenPartia 下断点5) jdb调试     打开monitor     鼠标选中要调试的进程(android.support.v8)     jdb–connectcom.sun.jdi.SocketAttach:hostname=localhost,port=8700调试环境中出现问题的解决:    IDA附加程序时显示目标积极拒绝则 重新输入端口转发命令。    IDA附加程序弹出错误则 重新运行IDA服务器命令    IDA F9运行程序如果没有反应则 检查是否输入jdb调试命令。    因为该程序是加壳的锁机软件,所有调试过程中难免会因为错误步骤让程序运行起来从而导致锁机,    这时可以运行adb uninstall android.support.v8  卸载锁机软件(注意:在手机被锁后切勿拔掉usb数据线)。
调试:    环境准备好后按F9 开始运行程序,这时会断到我们下断点的地方。      

1

1
     此时 R7寄存器中有值 /proc/self/cmdline.debug.atrace      

2

2
     使用adb查看      

3

3
     继续F9 运行让程序再次断在fopen函数处。在运行的过程中可     能出现如下错误提示,忽略它继续运行。      

4

4
            

5

5
     程序再次断在fopen函数处,这时 R7寄存器中的值         

6

6

     即 /proc/11446/status,从这里开始壳程序开始读取status文件     检查自己是否被调试跟踪了。继续F9运行。程序会断在fgets函数处,     这时我们在函数结束处下断点。查看函数返回值,如果是TracerPid属     性则修改值为0。     程序运行到函数末尾断点处,此时查看R0寄存器的值         

7

7

     即Name:roidd.support.v8     通过查看status文件可以知道,这个值是文件内第一行的字符串         

8

8

    从这里就可以知道程序还需要在运行5次才能读到 TracerPid属性    F9运行5次,在次查看fgets函数返回值         

9

9
                 Tracerpid:11465   这个值正是IDA服务器进程的UID   

10

10
   在Hex View中按F2修改这个值   

11

11
          12.png    这里要注意,修改的颜色是橙黄色,但是还不能使用,必须在按F2应用才行。   

13

13
   修改完之后,再次F9运行程序。   

14

14
   在次断在fopen函数处,此时R0寄存器的值      

15

15

   可以看到,壳程序再次读取/proc/11446/status 文件。显然反调试   不是只有一次的,那么继续修改它的返回值,直到不再读取这个文件。   通过再次修改,壳程序不再读取 /proc/11446/status文件了。说明它   的反调试就比较了两次,那么现在就可以去掉fgtes断点按F9让程序跑   起来了。   程序断在了这个函数处,这说明壳开始解密dex了同时证明前面已经成   功欺骗了反调试,继续单步观察寄存器中的值。   

16

16
   R0寄存器中保存着dex在内存中的地址,R1寄存器中保存着dex文件的大小。   

17

17
   通过Hex View 查看内存   

18

18
   内存中已经显示 0A 78 65 64 dex文件头模数了,右边字符串同样显示着dex.035。   红框中 06 FD 00 和R1寄存器的值一样。已经得到了dex内存地址和大小,接着使   用IDA脚本dump出这个dex文件。
[Lua] 纯文本查看 复制代码
   static main(void)
    {
        auto fp, begin, end, dexbyte;
        fp = fopen("F:\\dump.dex", "wb"); //打开或创建一个文件
        begin =  R0;                       //dex基址
        end = begin + R1;                  //dex基址 + dex文件大小
        for ( dexbyte = begin; dexbyte < end;dexbyte ++ )
        {
            fputc(Byte(dexbyte), fp);     //按字节将其dump到本地文件中
        }
    }
   

19

19
   文件保存在了F盘,使用工具打开这个dex文件     

20

20

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

Hmily 发表于 2017-3-27 16:09
从哪复制过来的,好乱啊,是原创吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-20 21:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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