ida调试so

Author Avatar
贾康 1月 06, 2018

为什么要学这个?

现在人们都喜欢把关键的核心逻辑写在so里边.如果想抄代码,爬服务器,破解的话就必须对so进行逆向.

准备工作.

  1. 一台root的安卓机,或者5.0以下的虚拟机(我没试,理论可行.至于为什么是5.0以下的见这里)
  2. ida pro
  3. 一丢丢ndk的知识
  4. 一丢丢ida的知识

过程.

  1. 用android studio 建一个包含c++的工程.
    upload successful
    都使用默认项一直下一步,得到一个包含jni的项目.
    upload successful
  2. 稍作修改.
    为了调试方便我们写一个简单的click函数来触发调用so的事件.

    public native String stringFromJNI();
    public void dealClick(View view) {
    TextView tv = (TextView) findViewById(R.id.sample_text);
    tv.setText(stringFromJNI());
    
    }
  3. 编译出apk,解压拿到so文件.
    upload successful
  4. 放到ida里边 ,搜函数名,找到代码,下断点.
    upload successful
  5. 启动android_server.
    在ida安装目录(\IDA 7.0\dbgsrv)下找到android_server拷贝到安卓手机的/data下,改权限chmod 777 android_server然后执行./android_server.
    upload successful
  6. 设置ida pro调试选项 然后附加进程.
    ip是同一局域网下手机的ip(不在同一局域网下需要端口转发).端口号固定23946
    upload successful
    选择附加进程
    upload successful
  7. 点击手机按钮,断下来了!!
    upload successful

结论.

至此我们完成了ida调试so的全过程.有两点需要注意,一是真正调的时候绝对不会这么顺利的,肯定有各种反调试手段等着我们,二是1-3步在实战中是没有的. 下一步就是找个软点的柿子实战一下了.