吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 11397|回复: 65

[安卓逆向图文] 安卓逆向逆向学习之“偷数据”

  [复制链接]
wis 发表于 2016-6-1 19:16 | 显示全部楼层 |阅读模式

本帖最后由 wis 于 2016-6-1 19:21 编辑

移动端解密的教程略少,我来贡献一份~
先解释下这里的“偷数据”是指通过对比原版app和别人逆向后的app,得到差异以及逆向分析思路。
这是一种很好的学习方法,通过对前人的逆向成品和原版的分析,在他没有给出逆向教程的前提下,我们也可以知道其逆向分析思路!
然后运用到新版本的app逆向中。
与其说是“偷数据”,不如说是“借鉴”

0x1 流程
大致流程如下:
①分别反编译同版本的原版app和别人的逆向成品
②对比反编译后的文件,得到差异
③根据差异得到逆向分析思路,并运用到新版本中


0x2 工具
本文用到的工具如下:
AndroidKiller1.3.1,IDAProv6.8,Beyond Compare,010 Editor,ARM_ASM Converter
AndroidKiller:用于反编译和编译apk,反编译得到的smali、xml等格式文件也可以在其中直接修改
IDAPro:用于反汇编和分析so文件
Beyond Compare:用于对比apk反编译后的文件
010 Editor:由于so文件不能在AndroidKiller和IDA中直接修改,所以使用010 Editor进行修改
ARM_ASM Converter:转码用的。

0x3 反编译
反编译apk也很简单,分别拖进AndroidKiller中,等1,2分钟就行。
1.png

2.png




0x4 对比分析
把原版文件夹和逆向版文件夹拖进Beyond Compare。
3.png
这里有3个文件夹,由于所有反编译后的文件都存放于Project中,所以右键Project进行比较。
4.png

5.png

等几分钟后,就能知道两者的差异了。
6.png
如图,我们最主要关注的是smali和lib文件夹下文件的差异。

先看smali的:
打开其中一个smali看到差异
7.png

他在return v0 前添加了一句const/4 v0, 0x1,意思是令这个方法强制return true
他的逆向目的是改为vip版。关键词是"key_user_isvip"

其他smali的修改类似,都是强制return true,即强制修改为vip版。
8.png
关键词是"isvip"。

再看lib的:
他修改过的so文件是lib_jni_dict.so,我们看一下。
12.png
记下001198E0

然后把lib_jni_dict.so拖进IDA中分析。
我们不等IDA分析完全,直接ctrl+G,然后ctrl+F找到001198E0处或者附近的地址,看下数据。
(因为ctrl+F搜索001198E0无果,所以找附近的)
11.png

找到相应的位置后,按F5看到以下代码:
  1. int __fastcall verifyContext(int a1, int a2)
  2. {
  3.   int v2; // r6@1
  4.   int v3; // r4@1
  5.   int v4; // r0@3
  6.   int v5; // r7@3
  7.   int v6; // r0@3
  8.   int v7; // r8@3
  9.   int v8; // r0@3
  10.   int v9; // r0@3
  11.   int v10; // r0@3
  12.   int v11; // r0@3
  13.   int v12; // r6@3
  14.   int v13; // r0@3
  15.   int v14; // r0@3
  16.   int v15; // r0@3
  17.   int v16; // r0@3
  18.   int v17; // r6@3
  19.   int v18; // r0@3
  20.   int v19; // r0@3
  21.   int v20; // r0@3
  22.   int result; // r0@5

  23.   v2 = a2;
  24.   v3 = a1;
  25.   if ( !(*(int (**)(void))(*(_DWORD *)a1 + 24))() )
  26.   {
  27.     _JNIEnv::CallObjectMethod(v3, 0, 0);
  28.     v2 = 0;
  29.   }
  30.   v4 = (*(int (__fastcall **)(int, _DWORD))(*(_DWORD *)v3 + 24))(v3, "android/content/ContextWrapper");
  31.   v5 = v4;
  32.   v6 = (*(int (__fastcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 132))(
  33.          v3,
  34.          v4,
  35.          "getPackageManager",
  36.          "()Landroid/content/pm/PackageManager;");
  37.   v7 = _JNIEnv::CallObjectMethod(v3, v2, v6);
  38.   v8 = (*(int (__fastcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 132))(
  39.          v3,
  40.          v5,
  41.          "getPackageName",
  42.          "()Ljava/lang/String;");
  43.   _JNIEnv::CallObjectMethod(v3, v2, v8);
  44.   v9 = (*(int (__fastcall **)(int, int))(*(_DWORD *)v3 + 124))(v3, v7);
  45.   v10 = (*(int (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 132))(
  46.           v3,
  47.           v9,
  48.           "getPackageInfo",
  49.           "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
  50.   v11 = _JNIEnv::CallObjectMethod(v3, v7, v10);
  51.   v12 = v11;
  52.   v13 = (*(int (__fastcall **)(int, int))(*(_DWORD *)v3 + 124))(v3, v11);
  53.   v14 = (*(int (__fastcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 376))(
  54.           v3,
  55.           v13,
  56.           "signatures",
  57.           "[Landroid/content/pm/Signature;");
  58.   v15 = (*(int (__fastcall **)(int, int, int))(*(_DWORD *)v3 + 380))(v3, v12, v14);
  59.   v16 = (*(int (__fastcall **)(int, int, _DWORD))(*(_DWORD *)v3 + 692))(v3, v15, 0);
  60.   v17 = v16;
  61.   v18 = (*(int (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 124))(v3, v16);
  62.   v19 = (*(int (__fastcall **)(int, int, _DWORD, char[4]))(*(_DWORD *)v3 + 132))(v3, v18, "hashCode", "()I");
  63.   v20 = _JNIEnv::CallIntMethod(v3, v17, v19);
  64.   if ( v20 == 1747956166 || v20 == -1666615029 )
  65.     result = 820711;
  66.   else
  67.     result = _JNIEnv::CallObjectMethod(v3, 0, 0);
  68.   return result;
  69. }
复制代码
getPackageInfosignatures和hashCode这三个词,判断这是apk的签名验证。


13.png
这是他改动的地方,代码如下:
  1. .text:001198CA                 ADD     R2, PC          ; "hashCode"
  2. .text:001198CC                 ADD     R3, PC          ; "()I"
  3. .text:001198CE                 LDR     R5, [R0,R5]
  4. .text:001198D0                 MOVS    R0, R4
  5. .text:001198D2                 BLX     R5
  6. .text:001198D4                 MOVS    R1, R6
  7. .text:001198D6                 MOVS    R2, R0
  8. .text:001198D8                 MOVS    R0, R4
  9. .text:001198DA                 BL      _ZN7_JNIEnv13CallIntMethodEP8_jobjectP10_jmethodIDz ; _JNIEnv::CallIntMethod(_jobject *,_jmethodID *,...)
  10. .text:001198DE                 LDR     R3, =0x682FB1C6
  11. .text:001198E0                 CMP     R0, R3         
  12. .text:001198E2                 BEQ     loc_1198FC
  13. .text:001198E4                 LDR     R3, =0x9CA9790B
  14. .text:001198E6                 CMP     R0, R3
  15. .text:001198E8                 BEQ     loc_1198FC
  16. .text:001198EA                 MOVS    R0, R4
  17. .text:001198EC                 MOVS    R1, #0
  18. .text:001198EE                 MOVS    R2, #0
  19. .text:001198F0                 BL      _ZN7_JNIEnv16CallObjectMethodEP8_jobjectP10_jmethodIDz ; _JNIEnv::CallObjectMethod(_jobject *,_jmethodID *,...)
  20. .text:001198F4
复制代码
大意是先将R0和hashCode1(0x682FB1C6)进行比较,相等则跳到loc_1198FC
然后将R0和hashCode2(0x9CA9790B)进行比较,相等则跳到loc_1198FC
由于修改过的apk要进行重新签名,所以R0肯定和任一hashCode均不相等的了
我们要改为相等。
其中一个改法是改为CMP R0, R0,如此一来,绝对相等,然后跳到loc_1198FC了。
或者像他一样改,改为"不等则跳"也行。




0x5 修改&回编译
通过以上的对比分析,得知此app逆向的2个关键点:
一是在smali里搜索isvip,可以将app改为vip版
二是在so里搜索signature,目的是逆向签名验证(如果不逆向此处,修改过的app会闪退)。


然后一一进行修改即可。


比如so里的签名验证,用010 Editor打开lib_jni_dict.so,ctrl+G搜索001198E0
14.png
如我想把CMP R0,R3改为CMP R0,R0怎么改?
如下图:
15.png

16.png

只需把此处的9842改为8042即可!~

END~
新手,求不喷~~



评分

参与人数 34威望 +1 HB +55 THX +18 收起 理由
lies + 1
sjtkxy + 2 + 1
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
24567 + 2
magicwk + 1
Jawon + 1
Soul1999 + 1
消逝的过去 + 1
冷亦飞 + 1
jaunic + 2
Rogue + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
ghostxu + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
yeah1 + 1 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
巅峰一挥 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
feng3593 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
郭子畅 + 1 [快捷评语] - 悬赏杀手主题,额外增加10HB,感谢热心解答!
Satan + 1 吃水不忘打井人,给个评分懂感恩!
lanqing + 1 分享精神,是最值得尊敬的!
飞行太保 + 1 + 1 分享精神,是最值得尊敬的!
888888888888888 + 1 求分享Beyond Compare
2528446893 + 1 分享精神,是最值得尊敬的!
史辐憬 + 2 + 1 分享精神,是最值得尊敬的!
2464896063 + 1 + 1 吃水不忘打井人,给个评分懂感恩!
rooffy + 1 + 1 分享精神,是最值得尊敬的!
wswwj + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Elegant + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
zxy20014 + 2 + 1 分享精神,是最值得尊敬的!
长江水 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
taowei0527 + 1 评分=感恩!简单却充满爱!感谢您的作品!
ttgnn + 1 + 1 分享精神,是最值得尊敬的!
Shark恒 + 1 + 20 + 1 评分=感恩!简单却充满爱!感谢您的作品!
now刘 + 2 + 1 这种帖子不顶可惜了
DM造梦者 + 1 + 1 分享精神,是最值得尊敬的!
A00 + 1 评分=感恩!简单却充满爱!感谢您的作品!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
wakichen 发表于 2016-6-1 19:21 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
yueyongbing 发表于 2016-6-1 19:26 | 显示全部楼层

看到已晕..板凳已做
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
userxy 发表于 2016-6-1 19:34 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
520Kelly 发表于 2016-6-1 19:45 | 显示全部楼层

没看懂为什么const/4 v0, 0x1就retn true
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
A00 发表于 2016-6-1 19:51 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| wis 发表于 2016-6-1 20:53 | 显示全部楼层

@Shark恒  本文完全是原创的。
而本文用到的逆向版也是本人所逆向的
我用自己的逆向作品 来 描述一种新人学习安卓逆向逆向的方法而已。。。
也就是对比学习法

点评

Shark恒”点评说:
抱歉,我也是为了保护原作者的权益,并不是对你有什么偏见,请提供该文件首发地。这里面有一些文字是复制过来的,所以我认为你是转载。  详情 回复 发表于 2016-6-1 21:28
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Gming 发表于 2016-6-1 21:26 | 显示全部楼层

貌似很给力的样子!!...感谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2016-6-1 21:28 | 显示全部楼层

wis 发表于 2016-6-1 20:53
@Shark恒  本文完全是原创的。
而本文用到的逆向版也是本人所逆向的
我用自己的逆向作品 来 描述一种新人 ...

抱歉,我也是为了保护原作者的权益,并不是对你有什么偏见,请提供该文章首发地。这里面有一些文字是复制过来的,所以我认为你是转载。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| wis 发表于 2016-6-1 21:39 | 显示全部楼层

Shark恒 发表于 2016-6-1 21:28
抱歉,我也是为了保护原作者的权益,并不是对你有什么偏见,请提供该文章首发地。这里面有一些文字是复制 ...

首发:https://www.52hb.com/thread-24150-1-1.html
文字全是手打的
没有一个文字是复制的啊

当然,你要是觉得这种学习方法太弱了 也是没有办法的 毕竟是自学嘛!

点评

Shark恒”点评说:
其实我是在保护你们原创的版权,望理解!  详情 回复 发表于 2016-6-1 21:43
Shark恒”点评说:
方法不弱,思路很好,只是有些字体和内容格式看着像看雪复制过来。。既然不是,那就OK了,抱歉,是我误会了。  详情 回复 发表于 2016-6-1 21:40
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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