主题更换

博客已将主题更换至 WP 官方的 2015。

可能会有一些错位问题,请尝试 Ctrl+F5;另外如果新主题有错位什么的请务必告知。

因为这个主题不会显示文章摘要,装了个「Advanced Excerpt」,感觉有点蠢,如果文章比较短也会显示唔…

总之,新的一年里也请多多指教啦~ .. 閱讀全文

华为 P8 ROOT+GApps 教程

硬性需求

  • 备份数据。
    使用华为自带的备份应用建立一个完整备份,
    并拷贝一份到外部SD卡或电脑以防万一。
  • 解锁 BootLoader: 参见荣耀6解锁,步骤一样。
  • 刷机有风险,变砖请谨慎。
    笔者不对您的设备变砖负责,且当您解锁 BL 的时候,
    明确理解您已经违反了华为的使用协议保修失效
  • 您能理解、并能够接受仅使用指令手动操作
    这是因为目前版本的 Recovery 不包含任何界面,
    您需要明白如何操作控制台/终端。
  • 您清楚明白,刷机有风险。
    该 Recovery 支援欧系手机「GRA-L09」,
    但经过笔者测试也兼容「GRA-UL00」型号。
    笔者未对其它 P8 型号进行测试,风险自行承担
  • 建议先将本文阅读至少一次后进行操作。
    尤其建议准备好适合自己机型的官方 Recovery 镜像。

救砖准备

  • 准备好完整安装包并解压到内部储存或外部 SD 卡根目录。
  • 从完整安装包提取原版 Recovery 镜像。
    适用「GRA-UL00」型号的镜像我已经在本文结束的「附件下载」提供。
  • 手机启动时,按下「音量上+音量下」进入 BL 界面,
    「音量上」进入 Recovery 界面。

准备工作

下载附件 (见末尾),至少需要下载 CWM.Recovery.no.gui.rar 和 SuperSU-v2.46.zip 这两个文件。

如果您需要刷入 GAPPS 包,请一定要在操作前进行一次备份,并下载额外两个软体包。

因为技术原因,您必须通过重置手机进行谷歌服务的初始化

当然,如果您有免重置手机启动「初始化精灵」的方法,请务必留言。

最后,为了方便系统升级,建议取得权限后刷回官方 Recovery

刷入 CWM Recovery

首先使重启至 BootLoader,然后就能刷入 recovery:

# 重启至 BL
adb reboot bootloader

# 刷入 Recovery 镜像
fastboot flash recovery cwm-p8-nogui.img

进入 Recovery

首先需要从 Bootloader 重启,然后重启至 Recovery:

# 重启手机
fastboot reboot
# 等候手机启动,键入下述文字进入 Recovery
adb reboot recovery

这个版本的 Recovery 没有界面,就是说启动后会黑屏。这是正常现象。

操作 Recovery

首先,将 zip 文件推入手机,然后刷入。

小提示:我试过刷入 CWM SuperUser,会无响应。

# 推入 SuperSU 文件
adb push [HuaWei.P8][GRA-UL00]CWM.SuperSU-v2.46.zip /su.zip

# 进入 shell (root 权限)
adb shell

# 等候「~ #」字样出现,键入下述文字:
/sbin/recovery --update_package=/su.zip

刷入后稍等片刻,设备将自动重启

重启后的设备将取得 ROOT 权限并安装有 SuperSU 应用。

刷入 GApps [非必须]

尝试过 CWM 刷入 GApps 包,但是会无响应… 可能是因为我找的包内置了安装界面卡住了 _(:з」∠)_

安装 ES 文件管理器或 RE,本文将使用前者示范。

首先,将所有能操作的分区挂载为可读写:

将下载的「[HuaWei.P8][GRA-UL00][Pico]PA.Gapps.zip」拷贝到手机,
并使用 ES 文件浏览器解压到「设备根目录」。

因为框架没有初始化过 (具体原因我也不懂),所以需要重置手机一次。

如果不进行初始化,直接启动 Play Store 会闪退…

而重置手机这个功能,则需要官方 Recovery 配合。

于是,我们需要重启至 BL,重新刷入官方 Recovery 镜像。

# 重启至 BL
adb reboot bootloader

# 刷入官方 Recovery
fastboot flash recovery Huawei-Stock-P8-B153.img

# 重启手机
fastboot reboot

手机启动完毕后,做好丢失数据的准备,然后执行 系统设定 | 备份与重设 | 恢复原厂设定 | 重设手机

重启后,首先是华为的初始化精灵,然后就是谷歌的初始化精灵了。初始化后,就能使用谷歌商店了。

附件下载

[HuaWei.P8][GRA-UL00][EMUI.3.1][B153]Stock.Recovery.rar
官方 Recovery,适用「GRA-UL00」型号:mega.nz | 百度: ppp8

[HuaWei.P8][GRA-UL00]CWM.Recovery.no.gui.rar
CWM 第三方 Recovery:mega.nz | 百度: ppp8

[HuaWei.P8][GRA-UL00][Pico]PA.Gapps.zip
GApps 应用包:mega.nz | 百度: ppp8

[HuaWei.P8][GRA-UL00]CWM.SuperSU-v2.46.zip
SuperSU 刷机包 (建议从官网下载):mega.nz | 百度: ppp8

标准提取码格式 (备用):

64B5D1261507800A8491F7DC2105D402#0071B1061F1E0B56E3B876A2C2243E4D#19666587#[HuaWei.P8][GRA-UL00][EMUI.3.1][B153]Stock.Recovery.rar
B7DB2869BBE54C714F0BDCB1767EDEB5#689AEAC4D36B714647025C2A8331E402#18634203#[HuaWei.P8][GRA-UL00][Pico]PA.Gapps.zip
DB9EE49E2318F3058EF944203527783A#F32DF7C606DB08EF557D098F4C9293A5#10566333#[HuaWei.P8][GRA-UL00]CWM.Recovery.no.gui.rar
332DE336AEE7337954202475EEAEA453#A036776BC05A9B7F5EBCA3C6DA17F4A5#4017098#[HuaWei.P8][GRA-UL00]CWM.SuperSU-v2.46.zip

参考来源

CWM Recovery: Huawei P8 Root
SuperSU: SuperSU Download
PA.Gapps: [GAPPS][18-04-2015][5.x] PA-GOOGLE APPS Plus(All ROM’s) .. 閱讀全文

E4P 2.6 去广告补丁

软件官网: http://thanks.duapp.com/
下载地址: http://haotk.tk/E4P/E4P2.6.rar
支援版本: 2015.3.7 更新的 E4P 2.6

实现原理是 SMC,有兴趣的可以去读一读程序人生的「带壳破解SMC补丁技术」。

修改小计

  • 程序使用易语言静态编译,并使用修改过的 UPX 进行加壳。
  • 广告是否弹出在启动窗口事件执行时进行判断,且广告载体为另一个易语言窗体。
  • 通过某种判定

首先使用 DiE 进行检测,扫描结果为「UPX(-)[modified]」。

既然是修改过的,那就没法用 upx 指令脱壳了。于是随便搜了一篇「利用 esp 定律脱壳的教程」跟着走,把壳子拿下。

然后就是搜寻窗体字串,没搜到,看来是加密了。也懒得去找。

因为已知程序是使用易语言静态编译的,所以我也自己写了一个加载窗体的代码然后反汇编:

004010BA  68 02000080   push 0x80000002    ; 参数类型 (逻辑)
004010BF  6A 00         push 0x0           ; 不明,可能是凑数
004010C1  68 01000000   push 0x1           ; 对话框

004010C6  6A 00         push 0x0
004010C8  6A 00         push 0x0
004010CA  6A 00         push 0x0           ; 父窗口 (空)

004010CC  68 01000100   push 0x10001       ; 参数类型 (窗口)
004010D1  68 06000106   push 0x6010006     ; 欲载入的窗口
004010D6  68 07000152   push 0x52010007    ; 欲载入的窗口

004010DB  68 03000000   push 0x3           ; 一共有三个参数
004010E0  BB 50114000   mov ebx, 00401150
004010E5  E8 54000000   call 0040113E      ; 载入

可以看出,易语言的加载窗口一共会 push 10 条参数。进行一下归类,得出特征码:

push 0x10001
push CONST
push CONST
push 0x3
mov R32, CONST
call CONST
  • 易语言该函数的原型:〈逻辑型〉 载入 (窗口 欲载入的窗口,[窗口 父窗口],逻辑型 是否采用对话框方式)

然后直接搜寻:
搜寻弹出窗体

把代码改掉就行。

修正补丁

58.6K

2015.06.21

原创

仅支援 2015.3.7 更新的 E4P 2.6

.. 閱讀全文

肚盘代码生成器

使用方法

  1. 打开程序
  2. 加入目录、加入文件亦或者选中多个文件拖放到列表。
  3. 单击生成代码,等待文件分析完毕即可。

肚娘代码生成器 v1

41K

2015.06.17

原创

黑月 3.5 / 易语言 5.1 / upx -9

度娘标准码生成器 v2

41K

2015.06.17

原创

黑月 3.5 / 易语言 5.1 / upx -9

代码如何使用?

Chrome、Firefox 用户请安装仓库用度盘投稿助手这个脚本,刷新百度网盘页面后:

  • 单击「通用提取码」按钮
  • 粘贴获得的代码
  • 选择确认。

执行上述步骤后稍等片刻,文件就会导入到您所在的目录了。

IE 或 IE 内核浏览器请参见游侠正版论坛的「肚娘 for IE v1.0」这个工具,不过只能够识别游侠自己的 v1 格式 :3

另外程序内部会屏蔽掉包含「-3DM」字样的文件名,移除限制的补丁已经在文章结尾附上。

逆向代码 /w\

肚娘.for.ie.1.0-patch.exe

2015.06.17

原创

提取:dddd

最后,送两串神秘代码 :3

BDLINKQkRGUwADAAAAAy9VBwAAAACQDay3keGr+p25GTbDZelYc+RLQghAJywFWbQzAeJreRcAAABbACtvO3VdAFsAQjCGMH4wF30xdV0AIAAUfRthfjBrMEIwYzBPMC4AegBpAHAAXXIFAAAAAACExg+Pjo+b019XHtmzWqv7lEfmLN0DIi6JcGBdzqsItSAAAAAUfRthfjBrMEIwYzBPMCAAMQAgAF7/UAB1AHIAZQAgAEwAbwB2AGUAIABNAGEAbgBpAGEAYwBe/y4AagBwAGcAv2JyDQAAAAB7+ys24PBoHfiQ77+Z9cGr8q2y0DYR1jZ9gZuw6zey0VMAAABbAE8AawBhAHoAdQAuAFMAdQBiAF0AWwBRAHUAZQBlAG4AIABCAGUAZQBdABR9G2F+MGswQjBjME8wIAAxACAAXv9QAHUAcgBlACAATABvAHYAZQAgAE0AYQBuAGkAYQBjAF7/IAA7/0IwhjB+MBd9MXU9/1sANwAyADAAUAAgAHgAMgA2ADQAIABIAGkAMQAwAFAAIABBAEEAQwBdAC4AbQBwADQA
84C60F8F8E8F9BD35F571ED9B35AABFB#9447E62CDD03222E8970605DCEAB08B5#356957#封面.jpg
900DACB791E1ABFA9DB91936C365E958#73E44B420840272C0559B43301E26B79#123023107#漫画.zip
7BFB2B36E0F0681DF890EFBF99F5C1AB#F2ADB2D03611D6367D819BB0EB37B2D1#225600191#喜闻乐见.mp4
.. 閱讀全文

Linux 下玩「帝国时代 III」

准备工作

安装 PlayOnLinux

PlayOnLinux 是一个使用 Wine 内核的 Win 程序模拟器 (沙盘)。因为其开源以及方便的 API 调用因此可以很方便的分享一键配置脚本。

脚本基于原来的「AOE III」源码更新而来。

中文版还在摸索阶段,不过英文版玩着很舒服于是就懒得调试了 ╮(╯▽╰)╭

强烈建议安装官方显卡驱动,游戏要求最低显存 128 MB。

游戏下载请跳到页面底部。

游戏内截图

遭遇战 - 选择队伍
遭遇战 - 开始
暂停界面

AOE III 英文原版 + DLC (亚洲王朝, 群雄争霸)

3.0 GB

2014.05.15

网络

POL 安装脚本 (核心 + 亚洲王朝)

原创

POL 安装脚本莫名其妙被 360 撤掉了;换成自己的文件仓库链接。

官方免 CD 更新补丁

文章更新日志

  • 修复被 360 云盘干掉的链接
  • 优化免 CD 补丁链接展示
.. 閱讀全文

红色警戒 II & 尤里的复仇 – 英文共存汉化包

如题,与英文版共存、共用游戏内容,非启动时替换汉化文件。

启动器本体是 Loader.exe,通过注入将界面与字幕文件指向汉化版文件。

另外因为可以基于配置文件进行自定义,只要你会使用反汇编工具就能找到应该在哪改。你也可以使用这个工具集成其它语言包。

当然,我也集成了免 CD 以及图形优化补丁。你若是有什么其它的补丁也可以发出来 :)

程序测试于 Windows XP SP3 + 原版光盘安装版,物品、对话全部完美翻译。

自解压包集成了快捷方式建立工具,可以最多一键建立四个程序的快捷方式 (原版、汉化)。默认勾选了汉化的版本。

快捷方式安装器

至于所谓的「安装程序」,是使用 WinRAR 自解压功能制作。你也可以更名为 .rar 然后直接开启 :)

红色警戒 II & 尤里的复仇 - 英文共存汉化包 修正1

2015.06.02

自己做的

提取:fix1

"旧版存档"

红色警戒 II & 尤里的复仇 - 英文共存汉化包

2015.06.02

自己做的

提取码: yuri


.. 閱讀全文

DLL 劫持代码生成器 [易语言]

代码生成器向导

界面就是这个样子了。

对于 winmm.dll 这种有很多 API 函数的动态链接库,请务必勾选「导出为文本格式源码」,否则易语言会爆炸 (无误)。

直接从易向导生成的代码,记得按一次 F5 然后贴到源码的顶部。因为易语言的限制,不能直接生成代码,所以 /w\

DLL 劫持代码生成向导.rar

25K

2015.05.28

原创

易语言开发

.. 閱讀全文

强行爆破 Multicraft 本地 & 网络验证

嘛 首发是在 吾爱破解,这里姑且算是重新排了下版面吧。

【软件名称】: Multicraft 1.8.2
【下载地址】: http://www.multicraft.org/site/page?view=download
【验证方式】: 本地+联网序列号验证
【开发语言】: Python 2.7
【破解目的】: 绕过序号检查、去除联网验证,实现无码注册。
【作者声明】: 
只是出于对破解感兴趣,请勿用于商业用途;如果你喜欢该软件请购买支持正版。
可能有的地方有错,还请各位看官指出修正,谢谢。

前言

以前尝试过一次破解,但是那时候对脚本语言认识不多,也不怎么会用搜索引擎,自然不知道从何下手。

现在学会了爬文,在论坛也看到了这篇帖子「[本地+网络双验证]破解 Multicraft 控制面板 过本地验证+山寨网络验证全过程」,遂尝试破解。

准备

首先就是手动提取相关文件。文件数据是贴在 exe 末端的“PKZ”字符开始的数据。

最开始我还以为只是一个 PKZ 包,结果搞了半天才发现,这东西是 PyInstaller 自创的 CArchive 格式 (识别代码在文件结尾)… 有兴趣可以去自己看看相关源码。

于是跑到官方拖一份最新的 PyInstaller 源码下来,然后根据源码逆推相关提取/打包代码。

提取、打包脚本

4K

2015.05.24

原创

需要安装 Python 2.7

CArchive 解出来的文件名大概是这样的:

001_0zout00-PYZ.pyz
002_1miu
003_1mstruct
004_1marchive
005_1s_pyi_bootstrap
006_1scarchive
007_1spyi_rth_encodings
008_1smulticraft
009_0oO

解释一下文件名的含义

首先最开始的是文件的序号,确保打包后的顺序不变。

然后就是下划线,连着一个数字。0 表示数据不会被压缩,1 则表示在打包的时候会被压缩。

后面会连着一个字符,其含义请参见源码。目前只需要知道 s 表示的是会被直接执行的脚本。

然后就是开工了,没错,就是 008_1smulticraft 这个文件。

其实我试过直接对 pyz 包进行处理去掉相关验证代码,但是打包出来的会提示找不到 AES 模组… 怀疑打包出来的 pyz 有点问题, 求指导

破解开始

在此之前,前言的帖子里已经给出了破解需要注意的函数位置,所以现在可以直接开工了。

首先在最上面插入一个破解内容的函数,避免命名冲突,然后立马调用:

def loader_patch():
    # 序号检查函数, 尽可能模拟原版
    def custom_load(self):
        self.key = '1111-2222-3333-4444'
        return True
 
    def custom_parse(self):
        self.serial = 9999
        self.customer = 9999
        self.edition = 62
        self.valid = True
        self.licenseOk = True
        return True
 
    license.License.load = custom_load
    license.License.parse = custom_parse
 
    # 破解网络验证 (+ 远端版本检查)
    import threaded
 
    def custom_read(self, params, sendTime, url):
        Global.disabled = False
        return (True, False, '<p>Cracked By Jixun :)</p>')
 
    threaded.PeriodicQuery.read = custom_read
 
loader_patch()

然后调试的时候发现,这破解没用啊,还是读取原来的函数 orz

然后就是偶然间发现了一个可疑的地方 (更改前的 586 行):

sys.modules[Parser.decode('bGljZW5zZQ==')].__dict__[Parser.decode('TGljZW5zZQ==')] = \
sys.modules[Parser.decode('X19tYWluX18=')].__dict__[Parser.decode('UGFyc2Vy')]

文字是 base64 加密,解开看看:

sys.modules["license"].__dict__["License"] = sys.modules['__main__'].__dict__['Parser']

大概是和授权方面有关系,不管他,直接干掉 (求指导,这句我也没怎么懂 orz)。

重新打包,果然可以了。扔张图上来 /w\

Multicraft Dynamic License

需要注意的地方

  • 提取脚本需要确保输出目录存在
  • 打包脚本不会检查输出文件是否已经存在,记得备份
  • 提取脚本不能直接从 exe 提取数据,逻辑没写好 orz

破解后的文件

10M

2014.xx.xx

来源 (可选)

直接覆盖原始文件 // 提取码: 6666

.. 閱讀全文

TreeDBNotes Pro 4 逆向手记

看雪乱逛,看到这个小东西:「【翻译】R4ndom破解教程全文翻译(For新手):第十三章」,其中的实战就是本次的目标。

如果你只是想去找个补丁的话,可以翻到最后面就是了。

首先就是用 DiE 查一查,发现是 Delphi 7 编译的软件。

查壳

没有壳,立马扔到 IDA 然后看字串索引。结果,什么都找不到 orz

于是跑到 IDR 下了一份主程序和 Delphi 7 的裤子,把程序扔进去慢慢分析。


找不到相关内容,只好祭出 OD 动态寻找字符串,基本上参考的教程里做的,找到了关键位置:

// 原 sub_ABE558
int __usercall reWriteRegStatus@(int self@, char regStatus@
) { if ( regStatus != *(_BYTE *)(self + 0x1618) ) *(_BYTE *)(self + 0x1618) = regStatus; return self; }

[self + 0x1618] 这个位置应该就是储存是否为注册版的标记。

查询引用,发现之前的调用

  if ( !a2 )
  {
    reWriteRegStatus(a1, 0);
    sub_AC0F64((int)&v13, 0);
    sub_405020(v4, v13);
    if ( strLen_0(v9, v10, v11) 0xA )
    {
      LOBYTE(v5) = 1;
      v6 = sub_A458F0(a3, v5);
      v7 = bIsProgromRegistered(v6, v14); // 00A4598C
      reWriteRegStatus(v3, v7);           // 00ABE558
      sub_403F08();
    }
  }

推断出位于 00A4598C 的函数就是检测注册码是否有效的。扔到 OD 下断,果然如此;参数2就是输入的注册码。

然后,函数将序列号前4位删掉,然后计算 SHA1 值并与内置的一串 SHA1 进行对比:

00A459AF   .
.. 閱讀全文