Skip to main content

Posts

Showing posts with the label crack

有关swf加密的一点感想

最近想把某flash游戏的1代和2代下载下来玩,但是都有域名验证,于是只好搬出decompiler 1代没有加密,结果是这么判断的 if(_url.indexOf("http://") != -1){ // ok }else{ // error } 当然直接爆破就好了 2代加了密,而且好像是swfencypt的模式,一开始是想放弃了,但是一想其实那个swfencrypt只是插了段恶心的tag,代码其实没有变,所以想碰碰运气 于是接着看1代的raw code,如下 //96 0e 00 08 00 07 01 00 00 00 08 01 07 0f 00 00 00 _push "http://" 1 "" 15 //22 _getProperty //96 02 00 08 02 _push "indexOf" //52 _callMethod //96 05 00 07 ff ff ff ff _push 4294967295 //49 _equals2 //12 _not //4c _dup //12 _not //9d 02 00 23 00 _if true goto #21 原来得到_url是靠压一个0f进栈,然后调22 然后拿ue去2代的swf里搜0f 00 00 00 22,只有一处,我晕,然后往后看,很多都和1代代码相似,只是'indexOf'的位置不一样,所以push的值也有少许区别。 由于判断的是!=,所以一般会有个not,结果不远处果然有个 12 9d, 然后把12改成01。 然后竟然就能玩了。。。 感想是: 1.swfencrypt的加密某种方面来说还是很弱 2.写代码时注意安全才是最重要的 -- 但是给程序员带来了而外的麻烦。。。 3.今天运气不错~~

SharedObject 修改器

最近破解一个Flash时需要修改它的SharedObject, 找到一些修改器,其中最好用的一个叫做.sol Editor, 主页是 http://sourceforge.net/projects/soleditor/ 只可惜只有Windows版本,但是在wine下跑得也不错。 另外就是不开源,也有点不爽。 但是它是我找到的几个修改器里最好用的一个。

东方妖妖梦破解手记

最近无聊, 又开始玩东方系列了, 其实我一直挺喜欢的, 但是水平太差. 不过这次我发现我可以7人通妖妖梦easy了, 挺高兴. 但是lunatic...哦...难以想像. 我的原则是"玩游戏, 而不被游戏玩", 于是只好...虽说网上有一堆现成的修改器, 但是那样就没有乐趣了. 首先是考虑简单的方法---金山游侠, 失败. 然后就只能去分析程序了. 首先看了眼, 没有壳. 再看导入表, 异常地干净, 只有windows库和一些direct3d的库. 让我觉得它好像是直接用汇编写的. 之后就要找切入点了. 我第一反应就是配置文件, th07.cfg, 因为选项里能调整默认人数, 那必定存在这里 经过简单地研究, 发现它存在1c出, 单字节, 为实际人数-1 初次尝试是直接修改配置文件, 比如改成7f, 然后启动游戏, 但是发现人数回到默认值了, 且退出游戏后发现配置文件也改回来了. 嗯. 有防备啊... 那只好再看代码了, 给所有CreateFileA设断, 运行时只看那些打开th07.cfg的, 一共两个, 且一个是打开后写些数据就CloseHandle了, 重点再另一个. 再找有关的ReadFile, 只有一个, 且在那之前有个GetFileSize, 看来是一次读入的, 呵呵, 给ReadFile的buffer下内存断, 不一会儿断在了00436f3d, 是个串移动指令rep movs...此时注意目标地址, 56ba64, 这可是重要情报! 然后该上静态分析了, 搜这个地址(一看就是全局变量), 没有多少, 其中看到了读完文件后进行校验的, 比如00436fbd处, 判断它是否比5大, 若是就回到默认值, 真是一清二楚. 那没什么说的了, 给exe做个备份, 然后ultraedit之... 但是事情没有想的那么顺利, 程序自动退出了, 看来这里也有防备. 不过既然网上有内存修改器, 那说明它肯定内存方面没有设防, 于是用olly载入, 修改后再运行, 就成功了! 后来想再整理一下, 找到最关键的修改位置, 找到了0044ff3f处, 简单地说如果当前人数小于4就加1, 否则不变, 我挺奇怪这里是干什么的, 下了断运行了半天, 发现原来是设置人数是, 按下右方向键, 则人数加1, 但是如果已经加到5个人就不能再加了. 啊哈哈, 被我抓住尾巴了...

[转]VB6逆向工程浅析(1-5全)

从stuhack找到的,原链接地址找不到了,感觉讲数组的那部分最有用 信息来源:[OCN]破解组织论坛(ocn.e5v.com/bbs1) nnd,前几天跟踪一个vb程序算法,几天没进展。找了一堆资料,给大家共享! ================================================== 前言 VB的编译有两种方式,一种是P-Code方式,一种是本机代码。P_Code方式是VB 从早期版本保留下来的,也是比较难逆向的一种。而本机代码方式编译的程序已经 和VC很接近了。这里只探讨以本机代码方式编译的程序。由于微软在VB的实现方面 的资料很少,使人觉得VB的逆向比较难。其实掌握一些规律,VB的程序还是很容易 入门的。 这里所提到的知识都是个人的经验,没有什么官方的资料作为依据。所以错误 之处难免,如果你发现什么错误,欢迎指正。 1. 从简单变量的实现开始 一个VB简单变量的表示至少需要12个字节。通常前2个字节是表示类型信息的。 从第5个字节到第8个字节并不总是使用到,实际上很少被使用。我们不妨先叫它 辅助类型信息。从第9个字节开始就是真正的变量的值了。这里有可能存储一个指针 值,也可能是数据,具体是什么取决于变量类型。 另一个值得注意的事实是VB的内存是以4个字节对齐的。即使你使用一个字节, 那至少也要4个字节来表示。而且编译器只初始化它需要的那些字节,剩余的字节 可能是随机数据。下面我们将会看到这些。 想弄明白编译器在内部怎么实现的,最好的方法就是编一段程序跟踪运行看看。 我编写的代码如下: Dim a, i As Byte Dim b, j As Integer Dim c, k As Long Dim d, l As Boolean Dim e, m As String Dim f, n As Date Dim g, o As Double Dim h, p As Single a = &H30 b = 330 c = 66000 d = True e = "hello" f = Now g = 3.1415 h = 1.27 i = a j = b k = c l = d m = e n = f o = g p = h 这段代码在VB的默认设置(速度优化)下编译。然后用od反汇编出来如下: 去...

[转]一个swf花指令

摘自csdn文章,我就遇到过这样的花指令,使得Sothink SWF Decompiler 3.3 不能正常工作 例1 : 向前跳转的包含无效尺寸数据的死代码。 push True branchifTrue label2 constants ''" label2: push 'a',3 setVariable 你仔细看的话,会发现"constants ''"这行是垃圾代码,它不可能被执行到。然而,理论上,当第二行的结果为"not True"时,它将被执行。因此,反编译器尝试对它进行反编译。 让我们来增大"0x88 - constants"后面的"sentence size",从而包括知道脚本结尾的所有字节。你知道,反编译器将把字节码砍成像这样的3个句子: push True branchifTrue label2 constants label2: push 'a',3 setVariable 如果你试图反编译此SWF文件,根据我前面提到的4个错误,一些反编译器将碰壁。仍旧有些反编译器幸存,但只是显示:"if(false){};"。ASV 3也不能显示此脚本,但是ASV 4能够显示。为了破解这个SWF,我们移除死代码"constant xxxx", (0x88和随后两个字节),然后所有的东西都得到反编译。 例2: 先后跳转的包含无效尺寸数据的死代码。 push 'b' label1: push 'a',3 setVariable branch label2 branch label1 label2: push 'b'是句垃圾代码,我们将修改它,用来使ASV 4碰壁。让我们来修改push 'b'的"length of sentence"。修改"0x96"后面的2个字节的数据,使句子的长度增长到分支Label1之前。这样,反编译器将把字节码作为3个句子: push label1: push 'a',3 setVariable br...