首页 > 编程语言 >安卓逆向 -- 自吐算法(MD5和SHA)

安卓逆向 -- 自吐算法(MD5和SHA)

时间:2022-12-26 19:07:04浏览次数:45  
标签:MessageDigest 逆向 String -- 安卓 自吐 import android Log


一、主要框架,hook代码主要填写在try代码块里

package com.bucuo.a20210908;
import android.app.Application;
import android.content.Context;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class hook implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam loadPackageParam) throws Throwable {
Log.d("逆向有你", "hook成功");
try{
}catch (Exception e){
e.printStackTrace();
}
}
public String b2s(byte[] bt){
StringBuffer sb=new StringBuffer();
int i=0;
while (i<bt.length){
int k=bt[i];
int j=k;
if (k<0){
j=k+256;
}
if (j<16){
sb.append("0");
}
sb.append(Integer.toHexString(j));
i+=1;
}
return sb.toString();
}
}

二、MD5算法实现源码(SHA算法同理)

import java.security.MessageDigest;
String bs= "逆向有你a";
MessageDigest md=MessageDigest.getInstance("MD5");//我要用md5算法
md.update(bs.getBytes());//我要加密的数据
byte[] res = md.digest();//给我加密
System.out.println("MD5加密(字节):"+Arrays.toString(res));
System.out.println("MD5加密(字符串):"+bytes2HexString(res));
MessageDigest mdmd = MessageDigest.getInstance("MD5");
mdmd.update("逆向".getBytes(StandardCharsets.UTF_8));
mdmd.update("有你".getBytes(StandardCharsets.UTF_8));
byte[] mdmdres = mdmd.digest("a".getBytes(StandardCharsets.UTF_8));
System.out.println(bytes2HexString(mdmdres));

三、分析要hook的地方

1、hook的类就是导入的包,即“java.security.MessageDigest”

2、update可以使用多次(如果hook这里会无限循环), digest只能使用一次(这里是hook点)

四、知道hook的类及方法名,开始编写代码

XposedBridge.hookAllMethods(XposedHelpers.findClass("java.security.MessageDigest", loadPackageParam.classLoader)
, "digest",
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
Log.e("逆向有你", "Stack:", new Throwable("stack dump"));
MessageDigest md = (MessageDigest) param.thisObject;//实例化
String algorithm = md.getAlgorithm();//获取加密算法的名称
if (param.args.length >= 1) {
byte[] params = (byte[]) param.args[0];
String data = new String(params);
String datahex = b2s(params);
String datab64 = Base64.encodeToString(params, 0);
Log.d("逆向有你",algorithm+"data:"+data);
Log.d("逆向有你",algorithm+"datahex:"+datahex);
Log.d("逆向有你",algorithm+"datab63:"+datab64);
}
byte[] res=(byte[])param.getResult();
String reshex = b2s(res);
String resb64 = Base64.encodeToString(res, 0);
Log.d("逆向有你",algorithm+"resulthex:"+reshex);
Log.d("逆向有你",algorithm+"resultb64:"+resb64);
Log.d("逆向有你","========================================================================");
}
});

禁止非法,后果自负

欢迎关注公众号:逆向有你


安卓逆向 -- 自吐算法(MD5和SHA)_安卓逆向

标签:MessageDigest,逆向,String,--,安卓,自吐,import,android,Log
From: https://blog.51cto.com/u_15288375/5970386

相关文章

  • 火山中文编程 -- 存款本息和
    例子:假设有本金1000元,想存一年,有三种方法可选择:活期,年利率为0.0036;一年期定期,年利率为0.0225;存两次半年定期,年利率为0.0198。请分别计算出一年后按3种方法所得到的本息和。......
  • 安卓逆向 -- 自吐算法(DES)
    一、DES算法源码DESKeySpecdeskey=newDESKeySpec("123456789".getBytes(StandardCharsets.UTF_8));//将密钥实例化SecretKeyFactorykey=SecretKeyFactory.getInstanc......
  • 火山中文编程 -- 温度转换
    例子:有人用温度计测量出用华氏温度98°F,现在要求用火山中文编程实现,把它转换为以摄氏法表示的温度。分析:摄氏度=(5/9)*(华氏度-32)一、新建MFC窗口,设置好布局二、编写代码三、运......
  • 软件工程——软件测试(黑盒测试、白盒测试、测试分析报告)
    经过前面软件测编码阶段,是不是我们就可以把软件发布出去供用户使用了呢?不是的,为了确保软件不会出现不必要的差错,还需要经过重重测试的。目录​​软件测试的目的​​​​软件......
  • UML——类图
    目录​​类​​​​类图是什么?​​​​什么时候产生类图?​​​​为什么用例图之后是画类图,这样做的目的是什么?​​​​类图的关系​​​​如何画类图呢?​​​​第一次机房中......
  • UML——用例图(Use case diagrams)
    目录​​什么是用例图?​​​​用例图帮我们做什么?​​​​用例图的基本元素有哪些?​​​​第一次机房收费系统用例图​​​​总结​​       一、什么是用例图......
  • UML——概述(什么是UML?UML有什么作用?面向对象技术)
    目录​​什么是UML?​​​​UML能帮我们做什么?​​​​什么是建模?​​​​为什么要建模?​​​​为什么要可视化建模?​​​​建模的原理(原则)​​​​UML的基本构造块​​​​U......
  • Microsoft 365 开发:使用PnP Powershell连接SharePoint Online失败
    Blog链接:​​https://blog.51cto.com/13969817​​​今天小伙伴使用PnPPowershell连接SharePointOnline时,遇到如下错误:ADSTS65001:Theuseroradministratorhasnotco......
  • UML——面向对象技术
    目录 ​​UML中为什么要使用面向对象技术?​​​​面向对象的基本原则有哪些?​​​​面向对象有哪些基本内容?​​​​类和对象的之间的关系是怎样的?​​​​究竟继承的是什......
  • 软件工程——文档篇
    何为软件工程?就是客户和开发人员提前定好相关需求,并形成文字材料,开发人员通过这个需求来开发软件,为了软件能够更适用,并进行相关的维护测试等方面的一个过程。简单来说就是开......