Android 逆向工程 —— Android 原生程序逆向 3

APK 下载
答案在 LOG 里的 APK

这次的 APP 还是 2015 年移动安全挑战赛(看雪&阿里主办)中的第二题,通用的解法参考这个系列的 上一篇文章,这篇文章再介绍一种取巧的解法,这种解法并不通用

其实在别的文章里也有提到过这种取巧的解法,但是同样不够详细,经过摸索并成功实践之后,我想再记录下来

直接跳到 IDA 载入 SO 的那一步,前面的步骤跟之前的都是一样的,留意到这里调用了 __android_log_print

该函数的原型是:
int __android_log_print(int prio, const char *tag, const char *fmt, ...)
第一个参数是 LOG 的优先级。取值可以是
typedef enum android_LogPriority { ANDROID_LOG_UNKNOWN = 0, ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ ANDROID_LOG_VERBOSE, ANDROID_LOG_DEBUG, ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL, ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ } android_LogPriority;
这个枚举类型里的任意一个
第二个参数是 LOG 的标签的指针,指针指向的标签通常用于过滤 LOG
第三个参数是 LOG 的格式的指针,该指针指向的通常就是 LOG 的内容

回忆一下 ARM 里调用函数时传参的规则,如果不是对象调用类的方法,在普通的函数调用里,caller 会把前四个参数分别放到 R0, R1, R2, R3 这四个寄存器中,这里也不例外。所以在调用 __andoid_log_print 的时候,R0 对应的是 LOG 的优先级,通过 MOV R0, #4 知道这里的优先级是 ANDROID_LOG_INFO;R1 对应的是 LOG 的标签,通过计算得出这里 R1 的地址为 0x6340,跳转过去发现是 bss 段,bss 段保存的是未初始化的全局变量,所以 R1 的值应该是程序执行过程中通过赋值符赋值的;同样,对应于 LOG 内容指针的 R2 也是如此。

来看看这里的这个 __android_log_print 会输出什么

运行 APP,打开 DDMS,随便输入一个密码,点击 “输入密码” 按钮,然后查看 logcat 选项卡输出的 LOG,发现输出的 LOG 太多了,过滤一下,得到如下 LOG

再来分析下函数的流程

通过对上图开始处的 R3 和 R1 值的比较分别进入不同的分支,具体为:如果 R3 和 R1 一直相等(一个字符一个字符比较),程序进入左边的分支,最后返回 1(true),如果 R3 和 R1 有一次不相等,直接进入右边的分支,返回 0(false)

而 R3 的值是 R2 保存的地址中的值,往上查看 R2 的地址中保存的值

就是我们之前看到的那个错误的答案

很巧,R2 保存的是既是我们要的答案的地址,也是 __android_log_print 函数的第三个参数,因此我们只需要把 __android_log_print 函数往下移,让它在将答案的地址赋给 R2 之后再调用就可以通过 LOG 来知道答案了。

具体的做法是:将之前的 __android_log_print 调用和之后的对 R0, R1, R2 的无关紧要的赋值 NOP 掉,然后在将 R2 的值赋为答案的之后再调用 __android_log_print。这里有几点是需要注意的:

  1. 答案的地址是受到 R1 的影响的,因此要把先前的 R1 保存下来,我的做法是把下面的 R1 改成 R3,然后把 LDR R2, [R1, R7] 改成 LDR R2, [R3, R7],这样 R2 的值不受影响,也能保证 tag 依然是之前的那个 tag
  2. 如何才能重新调用 __android_log_print 呢? 首先要明确这里能用调用 __android_log_print 的方法来输出答案的原因是程序本身调用了这个函数,因此我们可以通过 PLT 来获得这个函数在这个程序中的偏移,该偏移是位置无关的。关于 GOT 和 PLT,这里引用一下 通过 GDB 调试理解 GOT/PLT
    GOT(Global Offset Table):全局偏移表用于记录在 ELF 文件中所用到的共享库中符号的绝对地址。在程序刚开始运行时,GOT 表项是空的,当符号第一次被调用时会动态解析符号的绝对地址然后转去执行,并将被解析符号的绝对地址记录在 GOT 中,第二次调用同一符号时,由于 GOT 中已经记录了其绝对地址,直接转去执行即可(不用重新解析)。
    PLT(Procedure Linkage Table):过程链接表的作用是将位置无关的符号转移到绝对地址。当一个外部符号被调用时,PLT 去引用 GOT 中的其符号对应的绝对地址,然后转入并执行。

    双击 __android_log_print
    偏移是 0x000010D4
    回到我们要调用的地方,是在 R2 的值赋为答案的之后
    地址是 0x000012A8。我们知道,BL 指令计算的是相对偏移,即 PC + 偏移量,而 PC 的值等于 程序当前执行位置 + 8,原因 ARM 执行指令的方式是 “流水线” 的, PC 指向的是 “正在取指”,而不是指向 “正在执行” 的指令或正在 “译码” 的指令。因此计算偏移地址的公式为:偏移 = (目的地址 - 指令地址 - 8)/ 4,这里算出来就是 0xFFFFFF89

最后修改的结果:


打包签名并重新运行程序,并查看 LOG

看到答案啦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容