首页
社区
课程
招聘
[求助][求助]Android的.so文件中JNI本地函数和java层native调用函数参数的对应问题
发表于: 2015-10-19 16:30 4110

[求助][求助]Android的.so文件中JNI本地函数和java层native调用函数参数的对应问题

2015-10-19 16:30
4110
最近小菜在调研一个项目过程中,需要逆向一款Android产品用到的so文件,其中遇到了一个初级问题,在java层看到的JNI调用如下:
 private native void startTunnel(int arg1) {
 }

====================================================

通过IDA反汇编后的对应反汇编代码如下:
.text:00002F10
.text:00002F10
.text:00002F10                 public Java_com_service_FirewallVpnService_startTunnel
.text:00002F10 Java_com_service_FirewallVpnService_startTunnel proc near
.text:00002F10
.text:00002F10 timer           = dword ptr -3Ch
.text:00002F10 var_38          = dword ptr -38h
.text:00002F10 var_20          = dword ptr -20h
.text:00002F10 arg_0           = dword ptr  4
.text:00002F10 arg_4           = dword ptr  8
.text:00002F10 arg_8           = dword ptr  0Ch
.text:00002F10
.text:00002F10                 push    ebp
.text:00002F11                 mov     ebp, 91A2B3C5h
.text:00002F16                 push    edi
.text:00002F17                 push    esi
.text:00002F18                 push    ebx
.text:00002F19                 call    sub_2F04
.text:00002F1E                 add     ebx, 0E0D6h
.text:00002F24                 lea     esp, [esp-2Ch]
.text:00002F28                 mov     eax, [esp+3Ch+arg_4]
.text:00002F2C                 mov     [esp+3Ch+var_38], eax
.text:00002F30                 mov     eax, [esp+3Ch+arg_0]
.text:00002F34                 mov     [esp+3Ch+timer], eax
.text:00002F37                 call    init_fw_socket
.text:00002F3C                 mov     eax, [esp+3Ch+arg_8]
.text:00002F40                 mov     [esp+3Ch+timer], eax
.text:00002F43                 call    init_fd_manager
.text:00002F48                 mov     eax, ds:(deep_app_id_ptr - 10FF4h)[ebx]
.text:00002F4E                 mov     edi, ds:(run_ptr - 10FF4h)[ebx]
.text:00002F54                 mov     dword ptr [eax], 0FFFFFFFFh
.text:00002F5A                 mov     dword ptr [edi], 1
.text:00002F60                 mov     [esp+3Ch+timer], 0 ; timer
.text:00002F67                 call    _time
.text:00002F6C                 mov     edx, 91A2B3C5h
.text:00002F71                 mov     ecx, eax
.text:00002F73                 imul    edx
.text:00002F75                 add     edx, ecx
.text:00002F77                 sar     edx, 0Ah
.text:00002F7A                 sar     ecx, 1Fh
.text:00002F7D                 sub     edx, ecx
.text:00002F7F                 add     edx, 1
.text:00002F82                 imul    edx, 708h
.text:00002F88                 mov     [esp+3Ch+var_20], edx
.text:00002F8C                 jmp     short loc_2FA9
.text:00002F8C ; 
......

====================================================

F5后的代码如下:
int __usercall Java_com_service_FirewallVpnService_startTunnel@<eax>(int a1@<ebx>, int a2, int a3, int a4)
{
  int v4; // ebx@1
  int v5; // edi@1
  signed int v6; // esi@2
  int v8; // [sp+1Ch] [bp-20h]@1

  sub_2F04();
  v4 = a1 + 57558;
  init_fw_socket(v4, a2, a3);
  init_fd_manager(a4);
  v5 = *(int *)((char *)&run_ptr + v4 - 69620);
  **(_DWORD **)((char *)&deep_app_id_ptr + v4 - 69620) = -1;
  *(_DWORD *)v5 = 1;
  v8 = 1800 * (time(0) / 1800 + 1);
  while ( *(_DWORD *)v5 )
  {
    wait_fd();
    v6 = time(0);
    if ( v6 >= v8 )
    {
      on_timeout(v8 - 1);
      v8 = 1800 * (v6 / 1800 + 1);
    }
  }
  on_timeout(v8 - 1);
  clean_fw_socket();
  return close_fd_manager();
}

====================================================

我的问题是java层的native函数调用的参数和SO文件中的对应的本地函数参数是如何对应的?类似的JNI调用的反汇编代码在IDA中可以做哪些优化来提升阅读?

希望大大能为我解惑,或者推荐论坛中相关问帖子,小菜在此先谢过大大们

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//