芽衣 发表于 2020-12-13 19:29

〖补充〗关于 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:31

龙神邪少 发表于 2020-12-14 09:21
。。。我都试了好几个反编译的教程了,,啥都没弄出来,,,靠了,MT签名那块是需要付费,不付费用不了,, ...

我丢……用np管理器啊,kstool也行。又不是只有mt一家{:1_924:}

龙神邪少 发表于 2020-12-14 12:03

芽衣 发表于 2020-12-14 09:31
我丢……用np管理器啊,kstool也行。又不是只有mt一家

俺是新手啊,俺不晓得还有其他滴。。我看着大佬用的最多的就是MT了,,,

芽衣 发表于 2020-12-13 19:36






自古沙发不留

DL_君逸寒 发表于 2020-12-13 19:40

大佬太强了,等我考完试动手试试

战网无极限 发表于 2020-12-13 19:43

get到了,感谢分享

wanfon 发表于 2020-12-13 19:49

涨知识了,谢谢详解

liuxiaoxin 发表于 2020-12-13 19:52

大佬,牛批{:1_927:} 感谢分享,给力支持!{:1_921:}

小骚 发表于 2020-12-13 20:45

其实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

man2924981 发表于 2020-12-13 21:00

大佬,牛批 感谢分享,给力支持!

芽衣 发表于 2020-12-13 21:05

小骚 发表于 2020-12-13 20:45
其实Android studio 是有java转smali插件的...........

我转了它弹不出来,我都卸载了。

37377178849 发表于 2020-12-13 21:13

感谢分享,给力支持,从来不白嫖
页: [1] 2 3 4 5 6
查看完整版本: 〖补充〗关于 Java转smali 白嫖加速器的食用方法 Java2smali教程