爆肝+熬夜,終於把so用unidbg跑起來了,總不能放在硬盤裏發黴吧。咱們得在生成環境下用起來。java
最方便的方式就是租臺雲服務器,而後把Unidbg部署上去,就能夠給咱們的工做者程序提供雲簽名服務了。python
玩Unidbg還得是java老藝術家才行,cxapython大佬提供了一個springboot運行unidbg的方案:android
git clone 下來,而後導入到ideagithub
而後、編譯、運行......web
ffMac:unidbgweb fenfei$ python3 send.py
{'X-Khronos': '1627183488', 'X-Gorgon': '0401007008006c494547b54e36413a81b1a8118d238f2dffd9b3'}
複製代碼
跑一下做者提供的例子spring
我去,一套行雲流水,順利跑通。如今作開源的大佬都這麼拼了? 簡直開箱即用。json
咱們只下載了Unidbg-server的代碼,並無下載Unidbg的代碼?爲啥直接就能跑起來?api
奧祕在pom.xml裏面,加載了線上的unidbg模塊,因此能夠直接跑起來。安全
經過前面的學習,咱們對Unidbg已經有必定的熟悉了,因此可能維護了一份定製的修改。這樣問題就來了,可不能夠不加載線上的Unidbg的代碼,而加載咱們本機修改過的版本?
首先把咱們定製版的unidbg編譯成jar包,參考 91fans.com.cn/post/unidbg…
在 Unidbg-server工程的根目錄下(和pom.xml同級目錄)新建 libs 目錄
把定製版的unidbg編譯生成的一堆jar包拷進去
// 刪除這兩個段, 不使用線上的unidbg
<dependency>
<groupId>com.github.zhkl0228</groupId>
<artifactId>unidbg-api</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>com.github.zhkl0228</groupId>
<artifactId>unidbg-android</artifactId>
<version>0.9.0</version>
</dependency>
// 增長這一個段,使用本地的unidbg
<dependency>
<groupId>unidbg</groupId>
<artifactId>unidbg</artifactId>
<version>0.9.5</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/unidbg-parent.jar</systemPath>
</dependency>
複製代碼
而後在左側工程窗口點右鍵 Maven -> Reload project
從新編譯下。 報錯了,我就知道不會這麼順利。
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instanceiate [com .damei.xhs.xhsshield.controller.Xhs668Controller]:構造函數拋出異常;嵌套異常是 java.lang.NoSuchFieldError: OSX_ARM64
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:225)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
at org .springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1308)
... 18 更多
引發:java.lang.NoSuchFieldError:OSX_ARM64
複製代碼
在Unidbg的github上有個兄弟提了一個issues,和咱們遇到的問題同樣。 目前做者還木有解決方案。不過這個老兄說: 我用了以前的 0.9.2 沒有這個問題,0.9.3 就出現了這個問題
再仔細看看Unidbg-server做者的玩法,他用的是Unidbg的 0.9.0版本。
好吧,目前的權宜之計是把0.9.2的版本Unidbg代碼下載回來,而後加入咱們的定製代碼。再編譯一下,順利跑過。
生產環境下的性能瓶頸可能在unidbg的模擬器初始化上,咱們能夠只初始化一個模擬器,而後每次作簽名的時候只須要調用指定的函數就行。
在controller目錄下建立一個 FenfeiController.java
public class FenfeiController {
public static DouyinSign instance;
static {
instance = new DouyinSign();
}
@RequestMapping(value="dySignEx",method = {RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public String dySign(@RequestParam("url") String url) {
Map<String,String> result= instance.crack(url);
String jsonString = JSON.toJSONString(result);
return jsonString;
}
}
複製代碼
這樣模擬器只初始化了一次,感受能快一些了。
不過又引入了一個新問題,模擬器是被共享了,併發的時候是會出問題的,這也難不倒咱們,加個鎖就好了
public String dySign(@RequestParam("url") String url) {
synchronized (this) {
Map<String, String> result = instance.crack(url);
String jsonString = JSON.toJSONString(result);
return jsonString;
}
}
複製代碼
完美收工,上鮮啤。
能夠經過application.properties自行修改服務的地址和端口, 目前我使用的結果是隻改端口就行,ip地址就保持 0.0.0.0就能夠了。
開源程序的版本搭配也很重要,發現和最新代碼不兼容的時候,能夠研究下回退一兩個版本。
開箱可用,是大佬們努力的結果。不過咱們不能只知足於開箱就用,大概原理仍是要了解一下的。否則稍微定製下就抓瞎了。
Unidbg-server編譯成jar包,請參考 91fans.com.cn/post/unidbg…
咱們生來彷徨
TIP: 本文的目的只有一個就是學習更多的逆向技巧和思路,若是有人利用本文技術去進行非法商業獲取利益帶來的法律責任都是操做者本身承擔,和本文以及做者不要緊,本文涉及到的代碼項目能夠去 奮飛的朋友們 知識星球自取,歡迎加入知識星球一塊兒學習探討技術。有問題能夠加我wx: fenfei331 討論下。
關注微信公衆號: 奮飛安全,最新技術乾貨實時推送