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

公众号: 奋飞安全
• 阅读 2812

一、目标

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

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

  • unidbg
  • Unidbg-server

二、步骤

Unidbg-server

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

https://github.com/cxapython/unidbg-server

git clone 下来,然后导入到idea

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

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

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

跑一下作者提供的例子

Unidbg + Web = Unidbg-server  手把手教你搭个签名服务器 我去,一套行云流水,顺利跑通。现在做开源的大佬都这么拼了? 简直开箱即用

Unidbg在哪里

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

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

加点料

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

Unidbg + Web = Unidbg-server  手把手教你搭个签名服务器 把定制版的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包,请参考 http://91fans.com.cn/post/unidbgone/

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

我们生来彷徨

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
某车联网App 通讯协议加密分析(二) Unidbg手把手跑通
一、目标有一段时间没有写unidbg相关的文章了,这个样本挺合适,难度适中,还适当给你挖个小坑。所以后面是一个系列文章,包含unidbg补环境,TraceBlock对比流程,TraceCode定位差异。掌握好这一系列套路,Native分析可以算入门了。这次先来把so用unidbg跑通v6.1.0二、步骤DumpsoIDA打开 libencryp
代码还原的技术: Unidbg hook_add_new实现条件断点(二)
一、目标在做代码还原的时候,有时候会分析一组结果,希望在中途下个条件断点,比如在代码行0x1234,R00x5678的时候触发断点。今天我们就来试着搞一下。TIP:Unidbg代码同步到官方最新版,最新版已经支持浮点寄存器的显示了。二、步骤先写个floatdemotwo把祖传算法升个级extern"C"JNIEXPORTjstringJNIC
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
公众号:  奋飞安全
公众号: 奋飞安全
Lv1
奋飞,国家高级信息系统项目管理师,独立安全研究员。 http://91fans.com.cn/
文章
59
粉丝
4
获赞
44