frida动态修改

您所在的位置:网站首页 frida小程序 frida动态修改

frida动态修改

2024-07-11 07:17| 来源: 网络整理| 查看: 265

即将手机上的app的内容发送到PC上的frida python程序,然后处理后返回给app,然后app再做后续的流程,核心是理解send/recv函数

代码语言:javascript复制 代码语言:javascript复制public class MainActivity extends AppCompatActivity { EditText username_et; EditText password_et; TextView message_tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); password_et = (EditText) this.findViewById(R.id.editText2); username_et = (EditText) this.findViewById(R.id.editText); message_tv = ((TextView) findViewById(R.id.textView)); this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (username_et.getText().toString().compareTo("admin") == 0) { message_tv.setText("You cannot login as admin"); return; } //hook target message_tv.setText("Sending to the server :" + Base64.encodeToString((username_et.getText().toString() + ":" + password_et.getText().toString()).getBytes(), Base64.DEFAULT)); } }); } }

先分析问题,我的最终目标是让message_tv.setText可以"发送"username为admin的base64字符串。 那肯定是hook TextView.setText这个函数。

代码语言:javascript复制console.log("Script loaded successfully "); Java.perform(function () { var tv_class = Java.use("android.widget.TextView"); tv_class.setText.overload("java.lang.CharSequence").implementation = function (x) { var string_to_send = x.toString(); var string_to_recv; send(string_to_send); // send data to python code recv(function (received_json_object) { string_to_recv = received_json_object.my_data console.log("string_to_recv: " + string_to_recv); }).wait(); //block execution till the message is received var my_string = Java.use("java.lang.String").$new(string_to_recv); this.setText(my_string); } });代码语言:javascript复制import time import frida import base64 def my_message_handler(message, payload): print(message) print(payload) if message["type"] == "send": print(message["payload"]) data = message["payload"].split(":")[1].strip() print( 'message:', message) #data = data.decode("base64") #data = data data = str(base64.b64decode(data)) print( 'data:',data) user, pw = data.split(":") print( 'pw:',pw) #data = ("admin" + ":" + pw).encode("base64") data = str(base64.b64encode(("admin" + ":" + pw).encode())) print( "encoded data:", data) script.post({"my_data": data}) # send JSON object print( "Modified data sent") device = frida.get_usb_device() pid = device.spawn(["myapplication.example.com.frida_demo"]) device.resume(pid) time.sleep(1) session = device.attach(pid) with open("frida_demo2.js") as f: script = session.create_script(f.read()) script.on("message", my_message_handler) script.load() input()

参考链接:https://github.com/Mind0xP/Frida-Python-Binding



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3