〖补充〗关于 Java转smali 白嫖加速器的食用方法 Java2smali教程
本帖最后由 芽衣 于 2020-12-13 21:12 编辑我看到有不少人问https://www.52pojie.cn/thread-1326715-1-1.html这个代码怎么用,大部分刚接触安卓逆向的小伙伴应该是没有见过的。实际上需要新建一个类,然后再调用,不建议直接修改原代码。
Java转换成smali代码,之前我也见到有人问了。我一般推荐一些小巧的工具,不推荐专业工具,所以遇到复杂的写法就转换失败了。如果你百度Java转smali的方法,我也不知道怎么评价那些答案,也不能说是错的,但是执行起来也是问题多多……
准备工具:
1、Android studio、IDEA等
2、反编译工具
还是那句话,小白劝退。因为专业工具我感觉小白根本扛不住,像IDA、Android studio、IntelliJ IDEA、dnSpy、x64dbg等,光看名字你都不知道是什么,这让只会MT管理器的小白直呼受不了
当然我的方法不一定好,我只是以我的角度去处理这个问题,做个示范,并不代表唯一方法。总体思路是利用完整的apk源码,反编译后获得smali。
https://static.52pojie.cn/static/image/hrline/5.gif
一、编译1个简单的apk
编译器的功能就不介绍了,弄个简单的HelloWorld。然后编译成apk测试一下能否运行。
能生成就行了,因为我们主要是为了要dex文件,所以怎么设计app都不要紧。接下来写java代码,前提是必须要保证Java是对的,逻辑也不能出错,要不然最后Patch进去肯定用不了。
import android.content.Context;
import android.content.SharedPreferences;
import java.util.Date;
import static android.content.Context.MODE_PRIVATE;
public class Utils {
public static SharedPreferences sp;
public static String getRandom(Context context) {
sp = context.getSharedPreferences("Config", MODE_PRIVATE);
String id;
int a = 16;
String KeyString = "123456789abcdef";
int len = KeyString.length();
StringBuffer sb = new StringBuffer();
for(int i=0;i<a;i++){
sb.append(KeyString.charAt((int) Math.round(Math.random()*(len-1))));
}
id =sp.getString("id",KeyString);
if(needupdate()){
id = sb.toString();
sp.edit().putString("id",id).commit();
}
return id;
}
public static boolean needupdate(){
Date date = new Date(System.currentTimeMillis());
if(sp.contains("temp")&&date.getTime()-sp.getLong("temp",date.getTime())<43200000)return false;
sp.edit().putLong("temp", date.getTime()).commit();
return true;
}
}
二、加入apk源码
原文代码如上,那么如何塞进apk呢??
回到开发项目,右键Java文件夹新建1个类。从代码上面写的代码public class Utils可以知道,类名就是Utils。
然后就简单了,直接把代码复制进去。然后检查一下Java,没有出现警告,说明所有代码都已经正常识别。
最后再重建apk就差不多完成了。
三、抽取smali
如上图,直接反编译apk,就可以看到目录下有个Utils.smali。里面的代码就是我们想要的了。
嫌麻烦可以用mt管理器操作,mt管理器打开“app-debug.apk”,把其它的类全部删掉即可,留下单独的类备用,等下要调用这个类。
四、放进绿叶加速器
你也可以根据现有代码,用mt管理器新建一个类,然后拷贝进去,都一样,但是要注意代码内的路径。
回到绿叶生成设备id的方法内,先把方法代码全删,然后改成调用getRandom。
释义:
invoke-static:调用
move-result-object x:把上面方法的返回值移动到寄存器x
所以这里Patch的代码是:
```
.method public static j(Landroid/content/Context;)Ljava/lang/String;
.locals 4
invoke-static {p0}, LUtils;->getRandom(Landroid/content/Context;)Ljava/lang/String;
move-result-object v3
return-object v3
.end method
```
其中LUtils是文件路径,不建议写太长,容易记不住,getRandom就是方法名。这样就大功告成了!
实际上我没有试过,到底能不能自动注册新用户我也不知道,因为之前我测试写死dex的时候,如果变动id需要清空数据才能重新注册,然后我就扔垃圾箱了。{:301_979:}
备注:我知道编译器有插件一键转换smali,但是我用最新版的好像不兼容,遂卸之。 龙神邪少 发表于 2020-12-14 09:21
。。。我都试了好几个反编译的教程了,,啥都没弄出来,,,靠了,MT签名那块是需要付费,不付费用不了,, ...
我丢……用np管理器啊,kstool也行。又不是只有mt一家{:1_924:} 芽衣 发表于 2020-12-14 09:31
我丢……用np管理器啊,kstool也行。又不是只有mt一家
俺是新手啊,俺不晓得还有其他滴。。我看着大佬用的最多的就是MT了,,,
自古沙发不留 大佬太强了,等我考完试动手试试 get到了,感谢分享 涨知识了,谢谢详解 大佬,牛批{:1_927:} 感谢分享,给力支持!{:1_921:} 其实Android studio 是有java转smali插件的...........
https://s3.ax1x.com/2020/12/13/rmZXhF.png
https://s3.ax1x.com/2020/12/13/rmZvp4.png
https://s3.ax1x.com/2020/12/13/rmZLkT.png 大佬,牛批 感谢分享,给力支持! 小骚 发表于 2020-12-13 20:45
其实Android studio 是有java转smali插件的...........
我转了它弹不出来,我都卸载了。 感谢分享,给力支持,从来不白嫖