首页
社区
课程
招聘
[原创]Android下ARM静态反编译逆向.(小试多玩YY协议)
发表于: 2013-6-23 01:57 48876

[原创]Android下ARM静态反编译逆向.(小试多玩YY协议)

2013-6-23 01:57
48876

标 题: 【原创】Android下ARM静态反编译逆向.(小试多玩YY协议)
作 者: alice
时 间: 2013-06-23 AM

    最近有人问到YY协议,好像网上是有人已经搞出来了,不过这不是重点,重点是如何分析.回到主题:

    现在使用android基本上的保护方法都差不多,java部分都基本混淆(类名称混淆,过程混淆,字符混淆,多层继承混淆),其实这基本上都是增加一些难度而已,大部份静态都可以逆向出来的.

    所以很多程序重要的加密部分都使用JNI,放到SO文件里.不过以现在的情况来看,SO里都没有使用混淆或是像PC下的加壳或是VM等东西,所以现在也基本不难,不过ARM使用的是RSIC指令,本来ARM也刚出来几年,所以了解RISC的,还不是很多.

    本帖子也只是小笔记,可能需要一定的基础,太细节的东西可能不会详细说明,敬请谅解.

    本次主要目的是为了逆向 Java_com_duowan_mobile_service_GenKey_generateKey.(函数作用是不清楚,好像跟协议有关,现只是正好拿来讲解)

    首先要到JAVA中找到程序的原型(用JD-GUI),为是查看传入的参数和返回.

参数为byte数组,返回也是byte数组

然后找到在IDA打开libyyjni.so进行反编译.


好了,现在大概了解一下汇编的JNI的东西.为了了解JNI,得自己会写一点JNI.根据上面的函数,也写个大概类似的函数.



回到 Java_com_duowan_mobile_service_GenKey_generateKey




[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-2-16 16:30 被kanxue编辑 ,原因:
上传的附件:
收藏
免费 5
支持
分享
最新回复 (21)
雪    币: 193
活跃值: (1472)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
挖个坑,留更新用.
2013-6-23 02:00
0
雪    币: 132
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
SO 传上来,我来帮你把他灭了
2013-6-23 08:51
0
雪    币: 6528
活跃值: (3539)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
我看不到图..
2013-6-23 12:43
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
坐位子上等大牛更新,学习中。
2013-6-27 16:57
0
雪    币: 63
活跃值: (1258)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
超牛
膜拜
期待後續
2013-6-28 10:15
0
雪    币: 18
活跃值: (430)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
表格拿走了
2013-6-28 20:00
0
雪    币: 213
活跃值: (267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
挺不错的,楼主能不能提示下下面这段的分析

text:00009448 PUSH {R4-R7,LR}
.text:0000944A MOV R7, R11
.text:0000944C MOV R6, R10
.text:0000944E MOV R5, R9
.text:00009450 MOV R4, R8
.text:00009452 PUSH {R4-R7}
.text:00009454 SUB SP, SP, #0x3C ; SP=SP-0x3C
.text:00009456 STR R1, [SP,#0x60+var_2C] ; 把寄存器值存到一个虚内存地址
.text:00009458 MOVS R4, R0
.text:0000945A LDR R3, [R0,#0x3C] ; 从存储器装载数据到寄存器
.text:0000945C LDR R0, [R0]
.text:0000945E ADDS R6, R3, R0
.text:00009460 SUBS R0, R0, R3
.text:00009462 ASRS R1, R0, #0x1F ; 算数右移
.text:00009464 LDR R3, =0
.text:00009466 LDR R2, =0x404F0000
.text:00009468 BLX __muldi3 ; 带链接的切换跳转
.text:00009468 ;
.text:00009468 ; .text:0000C008 MUL R1, R2, R1 ; 32位乘
.text:00009468 ; .text:0000C00C MLA R3, R0, R3, R1 ; 32位累加
.text:00009468 ; .text:0000C010 UMULL R0, R1, R2, R0 ; 64位无符号乘累加(32位*32位)=64位
.text:00009468 ; .text:0000C014 ADD R1, R1, R3 ; 32位数相加
.text:00009468 ; .text:0000C018 BX LR ; 切换跳转
.text:0000946C LDR R3, [R4,#0x20] ; 十进制32
.text:0000946E LDR R0, [R4,#0x1C] ; 十进制28
.text:00009470 STR R1, [SP,#0x60+var_58]
.text:00009472 ADDS R5, R3, R0
.text:00009474 SUBS R0, R0, R3
.text:00009476 LSLS R0, R0, #3
.text:00009478 LDR R2, =0x519E4E00
.text:0000947A LDR R3, =0
.text:0000947C ASRS R1, R0, #0x1F
.text:0000947E BLX __muldi3


F5出的伪C
v2 = a2;
v3 = a1;
v4 = *(_DWORD *)(a1 + 60);
v5 = *(_DWORD *)a1;
v6 = v4 + v5;
v7 = 1078919168LL * (v5 - v4);
v8 = *(_DWORD *)(v3 + 32);
LODWORD(v7) = *(_DWORD *)(v3 + 28);
v9 = HIDWORD(v7);
v10 = v8 + v7 + v6;
v11 = (unsigned __int64)(10954633216LL * ((signed int)v7 - v8)) >> 32;
v12 = 1094778880LL * (v6 - (v8 + (signed int)v7));
v13 = *(_DWORD *)(v3 + 56);
LODWORD(v12) = *(_DWORD *)(v3 + 4);


不知 LODWORD(x) 在这里如何定义
2013-7-1 21:56
0
雪    币: 193
活跃值: (1472)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
看不是很懂这F5出来的代码.

  LDR     R0, [R4,#0x1C]  ;
这句我的理解应该是  v7 = *(_DWORD *)(v3 + 28);

LDR 返回不的是32位??用LODWORD(A)=B表示把表达式右边的值B的低16位放到到左边A的低16位
可理解为
A=(A & 0xFFFF0000) | (B & 0xFFFF);
2013-7-4 23:27
0
雪    币: 3572
活跃值: (760)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mark。。。。留作冥币
2013-7-4 23:35
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
11
支持,学习
2013-7-5 21:45
0
雪    币: 207
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
最新版本叫了名字混淆~希望楼主继续分析
2013-8-27 09:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
额,LZ挖的坑记得填哦~~~
2014-7-13 16:40
0
雪    币: 3542
活跃值: (239)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
非常清晰!感谢!求日后调教
2014-9-18 17:13
0
雪    币: 53
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Bet
15
好文, 标记收藏
2014-9-19 10:09
0
雪    币: 402
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
表格带走,回复留下!好东西!
2014-10-14 16:08
0
雪    币: 86
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
分析有点扯蛋,表格不错。
2014-10-26 16:25
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
拿走xls
2015-5-5 15:39
0
雪    币: 5634
活跃值: (2258)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
发现精品文章一编
2015-8-13 21:04
0
雪    币: 215
活跃值: (372)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
好文章,看汇编还是有些蛋疼...还是 F5大法好.
2015-8-14 14:52
0
雪    币: 48
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
表格很有用处
2016-6-27 11:16
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
感谢,收获很大,希望继续分析...
2016-9-13 23:36
0
游客
登录 | 注册 方可回帖
返回
//