Unidbg + Web = Unidbg-server 手把手教你搭个签名服务器

简介: Unidbg + Web = Unidbg-server 手把手教你搭个签名服务器

一、目标


爆肝+熬夜,终于把so用unidbg跑起来了,总不能放在硬盘里发霉吧。我们得在生成环境下用起来。


最方便的方式就是租台云服务器,然后把Unidbg部署上去,就可以给我们的工作者程序提供云签名服务了。


  • unidbg
  • Unidbg-server


二、步骤

Unidbg-server


玩Unidbg还得是java老艺术家才行,cxapython大佬提供了一个springboot运行unidbg的方案:


github.com/cxapython/u…


git clone 下来,然后导入到idea99.png


然后、编译、运行......

ffMac:unidbgweb fenfei$ python3 send.py
{'X-Khronos': '1627183488', 'X-Gorgon': '0401007008006c494547b54e36413a81b1a8118d238f2dffd9b3'}


跑一下作者提供的例子

100.png


一套行云流水,顺利跑通。现在做开源的大佬都这么拼了? 简直开箱即用


Unidbg在哪里


我们只下载了Unidbg-server的代码,并没有下载Unidbg的代码?为啥直接就能跑起来?

奥秘在pom.xml里面,加载了线上的unidbg模块,所以可以直接跑起来。


加点料


通过前面的学习,我们对Unidbg已经有一定的熟悉了,所以可能维护了一份定制的修改。这样问题就来了,可不可以不加载线上的Unidbg的代码,而加载我们本机修改过的版本?


  • 首先把我们定制版的unidbg编译成jar包,参考  91fans.com.cn/post/unidbg…
  • 在 Unidbg-server工程的根目录下(和pom.xml同级目录)新建 libs 目录


101.png

101.png


把定制版的unidbg编译生成的一堆jar包拷进去

  • 修改 pom.xml
// 删除这两个段, 不使用线上的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…

11.png

我们生来彷徨


TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。


关注微信公众号: 奋飞安全,最新技术干货实时推送


相关文章
|
20天前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
56 0
|
20天前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
29 0
|
20天前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
31 0
|
21天前
|
JavaScript 前端开发 UED
服务器端渲染新浪潮:用Vue.js和Nuxt.js构建高性能Web应用
【8月更文挑战第30天】在现代Web开发中,提升应用性能和SEO友好性是前端开发者面临的挑战。服务器端渲染(SSR)能加快页面加载速度并改善搜索引擎优化。Vue.js结合Nuxt.js提供了一个高效框架来创建SSR应用。通过安装`create-nuxt-app`,可以轻松创建新的Nuxt.js项目,并利用其自动路由功能简化页面管理。Nuxt.js默认采用SSR模式,并支持通过`asyncData`方法预取数据,同时提供了静态站点生成和服务器端渲染的部署选项,显著提升用户体验。
46 0
|
19天前
|
数据库 开发者 Python
web应用开发
【9月更文挑战第1天】web应用开发
34 1
|
7天前
|
数据可视化 图形学 UED
只需四步,轻松开发三维模型Web应用
为了让用户更方便地应用三维模型,阿里云DataV提供了一套完整的三维模型Web模型开发方案,包括三维模型托管、应用开发、交互开发、应用分发等完整功能。只需69.3元/年,就能体验三维模型Web应用开发功能!
32 8
只需四步,轻松开发三维模型Web应用
|
16天前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
17天前
|
前端开发 JavaScript 持续交付
Web应用开发的方法
Web应用开发的方法
13 1
|
17天前
|
前端开发 JavaScript 持续交付
web应用开发
web应用开发
23 1