Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容) (2)

上层的Java代码:

package com.example.hellojni; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class HelloJni extends Activity{ @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Button btn = (Button)findViewById(R.id.btn); btn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { String str = stringFromJNI(); btn.setText(str); }}); } public native String stringFromJNI(); public native String unimplementedStringFromJNI(); static { System.loadLibrary("hello-jnis"); } } 我们看到native层的字符串是:Hello from JNI !,那么我们现在来修改这个字符串内容。


四、技术实现

这时候我们就需要用到上面说到的那个强大的工具:IDA了,打开so文件,很简单的,界面如下:

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)



这里有很多窗口的,所以IDA工具很强大,我们需要慢慢的学习,还有各种快捷键的使用,都是一门学问。

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


在Functions window窗口中我们可以看到我们的native函数,如果太多的话,我们可以用Ctrl+F搜索。然后我们双击这个函数,在IDA View窗口中就可以看到这个函数的汇编代码了:

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


关于汇编指令,这里也不多解释了,大学里面都学过了,但是可能都忘了,所以还得复习一下。这里我们看到了,那个字符串的地址:aHelloFromJni - 0xBF4,0xBF4是偏移地址,这个aHelloFromJni应该是一个符号,所以我们双击跳到这个字符串的绝对地址。

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


这里又要在做一个插曲了,就是在详细介绍一下elf文件中的各个段的信息:

我们在IDA中可以使用Shift+F7快捷键打开段窗口:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwgjw.html