首页
社区
课程
招聘
[讨论]IDA中F5功能反编译安卓平台的so文件得到的一个很奇怪的函数
发表于: 2015-3-17 15:31 26286

[讨论]IDA中F5功能反编译安卓平台的so文件得到的一个很奇怪的函数

2015-3-17 15:31
26286
函数调用:
const unsigned __int8 *__fastcall getKeyString(_JNIEnv *env, int dmsnStr, int imsi_1)
{
const char *v11; // r0@3
_JNIEnv *jniEnv; // [sp+8h] [bp-110h]@1
jniEnv=env
LOBYTE(v11) = sub_6598((int)jniEnv);
}

从操作结果看,sub_6598这个函数其实就是GetStringUTFChars函数,按照malokch给我的指点,IDA之所以会反汇编成如下的结果,是因为在F5时缺少了JNI.h的头文件。
现在有个很难受的问题,jniEnv是Java类的指针,用来在C++实现的函数体中访问函数所在的Java类的方法或属性的,直接将JniEnv这个指针传给子函数sub_6598是什么意思呢?个人猜测真正传入的其实是方法体中JniEnv后面的参数(如getKeyString(_JNIEnv *env, int dmsnStr, int imsi_1)中紧随JNIEnv之后的dmsnStr

sub_6598函数定义:
char __fastcall sub_6598(int a1)
{
  return (*(int (**)(void))(*(_DWORD *)a1 + 676))();
}

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

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
对JNIEnv参数直接进行操作的函数体非常常见也特别典型,不解决这个疑问很难做进一步的so逆向
2015-3-17 15:46
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这时候就需对着ARM看了。
2015-3-17 15:55
0
雪    币: 100
活跃值: (328)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
ida可以导入C的头文件
2015-3-17 16:00
0
雪    币: 473
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个有什么好奇怪的,只是写代码的时候对GetStringUTFChars进行了一个简单的封装。只是ida不确定GetStringUTFChars的参数个数,导致这个地方有问题,手动调整下参数的个数就好了。
2015-3-17 16:07
0
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
对JNIEnv直接引用的地方特别多,写代码时对函数进行了封装我理解了,但是IDA不确定参数个数时就会直接对JNIEnv指针进行引用吗?按照你的指点我对函数类型做了定义,增加了两个参数后得IDA到如下结果
char __fastcall sub_6598(JNIEnv *env, char *a1)
{
  return ((int (*)(void))(*env)->GetStringUTFChars)();
}
虽然函数名正确解析为GetStringUTFChars,但是里面的参数确实空的,我百度了半天没有得到任何结果,请教下高手这是什么原因呢?是不是我方法的顺序不大对。

PS:看了下其所对应的汇编代码,非常简短,不过从这里能看出来其实应该有两个参数,一个是[R0],另外一个应该是默认的0(这里的0应该是GetStringUTFChars函数中最后一个布尔型变量的意思),从这里可以佐证子函数这样定义应该是没错的:sub_6598(JNIEnv *env, char *a1),上述参数为空的问题还是不知道如何解决

              PUSH    {R3,LR}
              LDR     R2, [R0]
              MOVS    R3, #676
              LDR     R3, [R2,R3]
              MOVS    R2, #0
              BLX     R3
              POP     {R3,PC}
End of function sub_6598
2015-3-17 17:11
0
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
头文件已经导入了,但是函数的参数究竟是什么的问题还是没解决啊
2015-3-17 17:13
0
雪    币: 29243
活跃值: (7764)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
8
参数问题可以直接在函数上点右键→Force call type
2015-3-17 19:47
0
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
您说的应该是set item type吧?就是手工设置函数的参数个数及类型?
2015-3-18 11:55
0
雪    币: 29243
活跃值: (7764)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
10
上传的附件:
2015-3-18 15:08
0
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
[QUOTE=风间仁;1359389][/QUOTE]

按照您的指点,果然已经搞定了,多谢回帖的楼上各位,谢谢风间仁,谢谢jinsheng
2015-3-21 19:53
0
雪    币: 729
活跃值: (1306)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
12
谢谢大神们。。。。
2015-8-28 16:25
0
雪    币: 244
活跃值: (174)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
非常感谢.
2016-1-7 16:38
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
高人想问下jni.h 这个东西在哪能找到下载啊我 没找到 能不能直接给我谢谢
2016-1-9 15:03
0
雪    币: 200
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
android ndk里面有
2016-1-15 12:07
0
游客
登录 | 注册 方可回帖
返回
//