Unidbg呼叫崔慶才app練習9題so計算token
- 前言
- APK分析
- Unidbg呼叫
前言
1.Unidbg專案地址:https://github.com/zhkl0228/unidbg
2.第八題與第九題解法完全一樣,這里以第九題為例
APK分析
首先抓包,發現token是加密的,抓包不是本文的關鍵,跳過,然后使用jadx打開apk,搜索【“token”】,僅有一處

點進去查找用例,可以發現是【Encrypt.encrypt】的方法進行加密

繼續點進去,發現呼叫了native的encrypt方法進行加密的

其中的引數就是定值【/api/movie】
Unidbg呼叫
接下來使用Unidbg呼叫這個so檔案來生成token,把【libnative.so】從從apk中拉出來,放到Unidbg專案的根目錄的so目錄下
在com.bytedance.frameworks.core.encrypt目錄下創建一個ScrapeCenter09的類【類名隨意】,下面是呼叫的代碼
package com.bytedance.frameworks.core.encrypt;
import com.github.unidbg.AndroidEmulator;
import com.github.unidbg.Module;
import com.github.unidbg.linux.android.AndroidEmulatorBuilder;
import com.github.unidbg.linux.android.AndroidResolver;
import com.github.unidbg.linux.android.dvm.DalvikModule;
import com.github.unidbg.linux.android.dvm.DvmClass;
import com.github.unidbg.linux.android.dvm.StringObject;
import com.github.unidbg.linux.android.dvm.VM;
import com.github.unidbg.memory.Memory;
import net.dongliu.requests.Requests;
import java.io.File;
import java.io.IOException;
public class ScrapeCenter09 {
private final AndroidEmulator emulator;
private final VM vm;
private final Module module;
private final DvmClass TTEncryptUtils;
public ScrapeCenter09(boolean logging) {
emulator = AndroidEmulatorBuilder.for32Bit().setProcessName(null).build();
final Memory memory = emulator.getMemory();
memory.setLibraryResolver(new AndroidResolver(23));
vm = emulator.createDalvikVM(null);
vm.setVerbose(logging);
DalvikModule dm = vm.loadLibrary(new File("so/libnative.so"), false);
dm.callJNI_OnLoad(emulator);
module = dm.getModule();
TTEncryptUtils = vm.resolveClass("com/goldze/mvvmhabit/utils/NativeUtils");
}
public void destroy() throws IOException {
emulator.close();
}
public static void main(String[] args) throws Exception {
ScrapeCenter09 test = new ScrapeCenter09(true);
test.ttEncrypt();
test.destroy();
}
public void ttEncrypt() {
StringObject encryptdata = TTEncryptUtils.callStaticJniMethodObject(emulator,
"encrypt(Ljava/util/List;)Ljava/lang/String;",
vm.addLocalObject(new StringObject(vm, "/api/movie"))
);
String token = encryptdata.getValue();
String url = "https://app9.scrape.center/api/movie/?offset=0&limit=10&token="+token;
String response = Requests.get(url).timeout(10000).send().readToText();
System.out.println(response);
}
}
運行查看結果

計算正常,并請求內容成功
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/280216.html
標籤:其他
