小白,要想使用这个武器,就要先打通经脉。
1.Root,手机root,无root不安卓。打通root经脉我们才能进行之后的操作。
2.Xposed框架安装,想要使用Xposed这个武器,就要先能拿的起来才能谈使用。
xposedBridgeApi-82.jar.jar。
这个就是我们的武器了,小白,来,我给你演示演示这个武器的基本使用方法。
我们这里使用Xposed武器拦截packageName,然后进行输出。
其实这个武器还是搭配内功才能发挥最大的能力。
搭配内功,师傅,这个怎么搞。
莫急莫急,我们一步一步来。
小白,我先传授你第一重内功的运行穴位。要好好听哦。
我们先来给内容运行提供一个环境。
(1)首先构建一个不需要Activity的项目
(2)然后导入jar包。并且右键add as Library。
(3)填写Androidmanifest.xml文件。
<meta-data android:name="xposedmodule" android:value="true" /> <meta-data android:name="xposeddescription" android:value="Hook log test" /> <meta-data android:name="xposedminversion" android:value="53" />
(4) 修改依赖方式
Xposed里已有该jar包内容,再次打包进去会冲突。
(5)基本Xposed模型创建
使用alt+enter实现一个方法。
小白,听我啰嗦两句。
handleLoadPackage,这个方法用于在加载应用程序的包的时候执行用户的操作。
LoadPackageParam loadPackageParam:,这个参数包含了加载的应用程序的一些基本信息。
这里一句话就可以实现。
XposedBridge.log("HAI_app: " + loadPackageParam.packageName);
这里我们要进行思考了,什么是 XposedBridge.log了。
The print of posedBridge.log will be output to the logging feature of the xposed framework's startup program.。这样也更方便我们的查看。
我们来做配置的最后一步。设置开始地方。
新建assets目录里,新建一个file。file名称为xposed_init。
写入包名+类。
Build APK
安装进行测试。
手机安装然后重新启动即可。
所谓师傅领进门,修行看个人。所以啊。
我知道了师傅,我们是不是可以通过这个简单的来进行过滤啊。比如写一个简单的分析系统。或者是其他的东西,我们还可以对这个进行过滤。我先自己去试试。
通过这个运行路径,对报名进行分析和过滤。
进行简单的尝试。
使用昨天学的java字符串的substring来进行对字符串过滤。
然后进行测试。
当然也可以针对这个进行更加详细的说明。
小白,来来,师傅这里给你找了一个木桩,我打给你看看。这个hook是怎么法功的,怎么打的。要学好哦。
知道了师傅。
小白啊,用我们之前使用过的一个武器,来收集这些基本信息吧。
师傅,我们一般都收集什么信息啊。
恩,我们一般要收集
1.木桩的包名
2.木桩的简单的逻辑
....
小白,这个你就自己收集把。
首先是包名。使用武器,apkhelper。
获取到包名信息。com.example.login
然后是简单的逻辑手机。
小白啊,收集玩了吗?
收集完了师傅。
好,我们接下来收集反编译信息。知己知彼,方能百战不殆。
首先我们来看看我们要收集的东西。
1.关键的类名。
2.关键的函数位置。
来用Android Killer武器反编译木桩。
定位。
查看类名,进行记录。
小白,看清楚,是这个样子进行记录。
原来是这样。com/example/login/MainActivity;
但是我们要改成这样的。com.example.login.MainActivity
现在就需要定位到关键函数了。
这个login就是我们要Hook住的函数啦。
Ljava/lang/String;Ljava/lang/String;从这里我们可以看到是两个输入内容。并且类型是String。我们现在要做的就是要hook住这个输出,然后对其进行输出。
好了,小白,前期资料收集的差不多了。我现在要发功了,要看清楚我的使用哦。
先把环境调整好。
然后先做一个简单的过滤。
这个时候,收集的包名就排上用场了。
因为是hook的是方法,所以我们这里使用一个方法。
第一个参数,要hook的包名+方法名,这个也是我们收集好的。
第二个参数不动
第三个参数方法名
第四个参数 输入的参数
我们有两个String类型的参数,所以才这样写
最后一个参数,就是做一个监听。可以监听这个方法的使用前和使用后。
小白,一切准备你就须,看为师给你f这个木桩。
小白,你看这第一招
XposedBridge.log("ZHUZHU520:LoginName:"+param.args[0]);
这一招搞它的第一个输入。
然后再来看这一招
XposedBridge.log("ZHUZHU520:Passward:"+param.args[1]);
这一招搞它的第二个输入。
然后最后一招。
XposedBridge.log("ZHUZHU520:end???:"+param.getResult());
这一招就是拦截返回值。
小白啊,这里有一个需要思考的内容。
这样hook的意义或者作用是什么?
师傅,我觉得首先,这样可以拦截下输入的参数,还有返回的值。如果在hook里做一个转发信息的技能。那不就可以成功的对登录账户的人进行账号和密码的获取。
这不就是和钓鱼一样了嘛。
我觉得这是一个很大的漏洞,如果登录厂商没有做相应的处理,那这里我可以拿这个搞死他。
好了,小白,你说的很对,我们现在来对这个进行下测试吧。
小白啊,你看这里我们就成功的拦截内容了。小白分配给你一个任务,使用hook f来拦截木桩,并确保不管我是否输入正确,木桩能够成功登录。
XposedBridge.log("ZHUZHU520:end???:"+param.getResult());
师傅之前使用了一个param.getResult()获取了返回值,那我是不是可以使用相同的set方法,重新对这个进行赋值啊。
根据各种方式,我们知道了这里的返回值就是Z,也就是布尔型。
说干就干,争取f掉木桩。
以上是Android逆向进阶的方法是什么的详细内容。更多信息请关注PHP中文网其他相关文章!