求助多线程程序逆向方法

求助多线程程序逆向方法,第1张

有三种:

(1)继承Thread类,重写run函数

创建:

class xx extends Thread{

public void run(){

Thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源

}}

开启线程:

对象.start() //启动线程,run函数运行

(2)实现Runnable接口,重写run函数

开启线程:

Thread t = new Thread(对象) //创建线程对象

t.start()

(3)实现Callable接口,重写call函数

Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务

Callable和Runnable有几点不同:

①Callable规定的方法是call(),而Runnable规定的方法是run().

②Callable的任务执行后可返回值,而Runnable的任务是不能返回值的

③call()方法可抛出异常,而run()方法是不能抛出异常的。

④运行Callable任务可拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等

待计算的完成,并检索计算的结果.通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果

这次要破解的软件是这个: http://www.xazhouyi.com/android/soft/bazi.html

首先分析其行为,打开软件:

按照以往的经验,程序有个字段用于维护注册状态,我们可以通过字符串快速定位到它。我们将其载入 AK:

搜索“软件未注册”,在 string.xml 中找到:

然后在 public.xml 中找到,字符串的 ID 是 0x7f060003 。之后搜索这个数字。

我们在 main ,也就是入口的 MyInit 函数中找到了这个数值:

我们猜想 :cond_b 是失败分支,我们往上找:

我们可以得出 ChkNumA/B/C 是三个关键判断。下面的 if-eqz 是关键跳。成功各分支将 m_regFlag 设为 1,说明它是保存注册状态的字段。

我们可以将这三个 if-eqz 都给注释掉,但是我们可以采取另一种方式,在最后一个 if 的下面添加 :goto_100 标签,然后在第一个 if 上面添加 goto :goto_100 。

重新打包、安装软件后,打开软件,我们发现不再d出注册提示了。访问菜单->更多->注册之后,在注册界面中我们可以看到“已注册”。

按使能开关。若用户需要逆向运行程序则处理直接按使能开关即可。逆向exe文件说白了就是把exe文件通过记录格式,然后呢解析出其中的这些资源,包括每一个所出的地址,这样就可以通过汇编语言来读懂可执行文件了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11812025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存