Minisoyo社区's Archiver

欢迎注册泡面三国

正在刷新 发表于 2008-5-28 13:38

破文一篇

这个确实是一篇破文.破的不能再破的文章.高手莫笑....
这次开刀的是中国象棋-典藏版,废话少说,先把其反汇编了.
等马上用Halo打开后定位到缴费文件再打开反汇编文件读程
序.至于定位估计就不用我说了.很简单的.这里是c.class文
件.打开c.java文件,读程序.发现其收费代码如下:
public final void run()
        {
                a = 1;
                d;
                JVM INSTR tableswitch 1 4: default 317
        //                       1 62
        //                       2 40
        //                       3 221
        //                       4 40;
                   goto _L1 _L2 _L3 _L4 _L3
_L3:
                try
                {
                        Gamelet.a.platformRequest(b);
                        a = 2;
                        return;
                }
                catch (Exception )
                {
                        a = 3;
                }
                return;
_L2:
                MessageConnection messageconnection = null;
                TextMessage textmessage;
                (textmessage = (TextMessage)(messageconnection = (MessageConnection)Connector.open(b)).newMessage("text")).setAddress(b);
                textmessage.setPayloadText(c);
                if (e <= 1)
                {
                        messageconnection.send(textmessage);
                } else
                {
                        for (int i = 0; i < e; i++)
                        {
                                g.a("repeat", i);
                                messageconnection.send(textmessage);
                                a.a(i, e);
                        }

                }
                a = 2;
                if (messageconnection != null)
                        try
                        {
                                messageconnection.close();
                        }
                        catch (Exception ) { }
                return;
                JVM INSTR pop ;
                a = 3;
                if (messageconnection != null)
                        try
                        {
                                messageconnection.close();
                        }
                        catch (Exception ) { }
                return;
                Exception exception;
                exception;
                if (messageconnection != null)
                        try
                        {
                                messageconnection.close();
                        }
                        catch (Exception ) { }
                throw exception;
_L4:
                messageconnection = null;
                try
                {
                        messageconnection = (MessageConnection)Connector.open(b);
                        do
                        {
                                Message message = messageconnection.receive();
                                a = 2;
                                if (message instanceof BinaryMessage)
                                        ((BinaryMessage)message).getPayloadData();
                                else
                                        ((TextMessage)message).getPayloadText();
                        } while (true);
                }
                catch (Exception )
                {
                        a = 3;
                }
                if (messageconnection != null)
                        try
                        {
                                messageconnection.close();
                        }
                        catch (Exception ) { }
                return;
                Exception exception1;
                exception1;
                if (messageconnection != null)
                        try
                        {
                                messageconnection.close();
                        }
                        catch (Exception ) { }
                throw exception1;
_L1:
        }
在run方法里,可是发现此方法无返回值,那么我们可以确定,
肯定在run方法里对某个变量进行赋值了.然后根据此变量值
确定是否缴费.这里有个诀窍,你一直跟踪程序.按正常情况下
走,变量最后的值即是正常缴费的返回值.这里我们发现只有一
个变量a.跟踪变量a,可以得知当a==2时,即标志着成功缴费.
我们只须让此方法留一条a=2;语句即可.分析完后,返回Halo
界面.选中c.class文件.右键edit class.找到run方法.选
中代码编辑表.如下图.
[attach]556486[/attach]
删除除1.2字节码以外的所有字节码.如图
[attach]556487[/attach]
然后双击iconst_1将1改为2,确定即可,
[attach]556485[/attach]
最后别忘记了保存方法.编译,打包即可.

[[i] 本帖最后由 正在刷新 于 2008-5-28 13:44 编辑 [/i]]

saga. 发表于 2008-5-28 13:44

:006 高手~

正在刷新 发表于 2008-5-28 13:55

呵呵.对汉化不太感兴趣啊.我用国外软件的时候就比较喜欢E文的.:大笑

lshjava 发表于 2008-5-28 16:26

不错,谢谢楼主!

7928110 发表于 2008-5-29 00:48

a = 2  就成功是吗:哭泣

olovemax 发表于 2008-5-29 14:59

高人:098

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.