ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

App逆向之objection的使用

2022-07-17 14:00:43  阅读:444  来源: 互联网

标签:逆向 java objection App MainActivity cxa logindemo android com


objection指令

安装

pip install objection

objection注入指定应用。

objection -g cxa.com.logindemo explore

查找所有可用activities

 android hooking list activities

结果

cxa.com.logindemo.MainActivity

Found 1 classes

之后可以查在这个类下面有哪些方法

 
android hooking list class_methods cxa.com.logindemo.MainActivity

结果

 
public native java.lang.String cxa.com.logindemo.MainActivity.get_str(java.lang.String,java.lang.String)
public static java.lang.Object cxa.com.logindemo.MainActivity.access$super(cxa.com.logindemo.MainActivity,java.lang.String,java.lang.Object...)
public void cxa.com.logindemo.MainActivity.onCreate(android.os.Bundle)

Found 3 method(s)

发现方法名和参数基本上一样。
之后可以通过objection生成frida的代码

 
android hooking generate  simple cxa.com.logindemo.MainActivity

生成的结果如下:

 
Java.perform(function() {
    var clazz = Java.use('cxa.com.logindemo.MainActivity');
    clazz.get_str.implementation = function() {

        //

        return clazz.get_str.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('cxa.com.logindemo.MainActivity');
    clazz.access$super.implementation = function() {

        //

        return clazz.access$super.apply(this, arguments);
    }
});


Java.perform(function() {
    var clazz = Java.use('cxa.com.logindemo.MainActivity');
    clazz.onCreate.implementation = function() {

        //

        return clazz.onCreate.apply(this, arguments);
    }
});

生成了一个基本的框架,参数啥的还需要我们自己补充

除此之外还可以监视进行某个操作的时候调用了哪些方法

 
android hooking watch class cxa.com.logindemo.MainActivity

得到结果

 
(agent) Hooking cxa.com.logindemo.MainActivity.access$super(cxa.com.logindemo.MainActivity, java.lang.String, [Ljava.lang.Object;)
(agent) Hooking cxa.com.logindemo.MainActivity.get_str(java.lang.String, java.lang.String)
(agent) Hooking cxa.com.logindemo.MainActivity.onCreate(android.os.Bundle)
(agent) Registering job 3rwdi3ui6lu. Type: watch-class for: cxa.com.logindemo.MainActivity

然后可以调用上面查到的方法,查看其方法的调用栈和返回值以及参数

 
android hooking watch class_method cxa.com.logindemo.MainActivity.get_str --dump-args --dump-return --dump-backtrace

结果如下

 
cxa.com.logindemo on (google: 8.1.0) [usb] # android hooking watch class_method cxa.com.logindemo.MainActivity
.get_str --dump-args --dump-return --dump-backtrace

(agent) Attempting to watch class cxa.com.logindemo.MainActivity and method get_str.
(agent) Hooking cxa.com.logindemo.MainActivity.get_str(java.lang.String, java.lang.String)
(agent) Registering job vut0pnx8gnn. Type: watch-method for: cxa.com.logindemo.MainActivity.get_str
cxa.com.logindemo on (google: 8.1.0) [usb] # (agent) [vut0pnx8gnn] Called cxa.com.logindemo.MainActivity.get_str(java.lang.String, java.lang.String)
(agent) [vut0pnx8gnn] Backtrace:
        cxa.com.logindemo.MainActivity.get_str(Native Method)
	cxa.com.logindemo.MainActivity$1.onClick(MainActivity.java:37)
	android.view.View.performClick(View.java:6294)
	android.view.View$PerformClick.run(View.java:24770)
	android.os.Handler.handleCallback(Handler.java:790)
	android.os.Handler.dispatchMessage(Handler.java:99)
	android.os.Looper.loop(Looper.java:164)
	android.app.ActivityThread.main(ActivityThread.java:6494)
	java.lang.reflect.Method.invoke(Native Method)
	com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
	com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
	de.robv.android.xposed.XposedBridge.main(XposedBridge.java:108)

(agent) [vut0pnx8gnn] Arguments cxa.com.logindemo.MainActivity.get_str("same", "1234")
(agent) [vut0pnx8gnn] Return Value: "samehook this method1234"

可以发现它的两个参数类型为string,并且看到其调用栈以及其返回值。

完整的android代码

 
package cxa.com.logindemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    EditText Name; //定义Plain Test控件第一个输入框的名字
    EditText Pass; //定义Plain Test控件第二个输入框的名字
    TextView message_tv;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Name = (EditText) findViewById(R.id.TEXT_NAME);//通过findViewById找到输入框控件对应的id,并给他起个名字
        Pass = (EditText) findViewById(R.id.TEST_PASS);//通过findViewById找到输入框控件对应的id,并给他起个名字
        message_tv = ((TextView) findViewById(R.id.textView3));
        Button Login = (Button) findViewById(R.id.BTN_LOGIN);
        Login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //check(Name.getText().toString().trim(), Pass.getText().toString().trim());
                //调用check函数
                if (Name.getText().toString().compareTo("cxa") == 0) {
                    message_tv.setText("你不能使用cxa这个用户登录");
                    return;
                }
                message_tv.setText("成果躲开用户判断 :" + Base64.encodeToString((Name.getText().toString() + ":" + Pass.getText().toString()).getBytes(), Base64.DEFAULT));
                Toast.makeText(MainActivity.this, get_str(Name.getText().toString(),Pass.getText().toString()), Toast.LENGTH_SHORT).show();//弹框

            }
        });
    }

    //
//    public void check(String name, String pass) {
//        //定义函数check 这里检查用户名和密码
//        //是否为
//        if (name.equals("cxa") && pass.equals("1234")) {
//            Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();//弹框
//
//        } else {
//            Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();// 弹框
//
//        }
//
//
//    }
    public String get_str(String params_a,String params_b) {
        String c =params_a.concat("hook this method"+params_b);
        return c;
    }
}

spawn的形式

 
objection -g com.hd.zhibo explore --startup-command "android hooking watch class_method android.app.AlertDialog.onCreate --dump-args --dump-backtrace --dump-return"

 

参考链接:
https://www.anquanke.com/post/id/197657

标签:逆向,java,objection,App,MainActivity,cxa,logindemo,android,com
来源: https://www.cnblogs.com/ilovepython/p/16486767.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有