seeyou 发表于 2012-11-9 00:40:54

揭秘autoit3的运行机制和反编译原理

本帖最后由 seeyou 于 2012-11-9 08:25 编辑

今天发这个帖子的目的在于和论坛里面的朋友交流一下学习心得,主要内容是围绕着autoit3的编译原理。先开门见山的说一下结果,我不知道如何反编译au3,但相信论坛有很多高手,能解开我心中的疑团。我没有想通过反编译去获取别人源码的欲望,只是在学习au3的过程中,总有想窥探庐山真面目的冲动。很多挥之不去的问题,比如autoit3是怎么工作的,它的exe文件又是如何被人反编译的?相信具备这些知识能帮助我们更好的了解autoit3,以下是我的探索过程,希望起到抛砖引玉之功效。

    据我第一次接触autoit3至今已有两个月之久,autoit的send和hotkey函数是我学习它的根本原因。随着学习的深入,我发现它称得上一门小而强大的脚本语言——内核小、功能强大。如果没有发生什么意外的话,对于autoit,我会像其他语言一样把它学下去,但是意外就在不经意之间发生了,这个意外也改变了我的学习轨迹。有一天,我把一个脚本打包成exe文件,在运行的时候产生了一个错误,信息居然告诉我某一行、某一个函数出错了。大家不要嘲笑我无知,我的确被这个提示震惊了。因为我一直认为它经过“编译”后,已经很难反编译到源码了,至少不能准确的知道出错处的是源码的第几行。显然,我的认识错了。我不禁想知道,它的编译是一个怎么样的过程?
autoit3本身很难给我这个答案,我只好把这个答案诉诸于它的胞弟autohotkey,我下了autohotkey的源码,包括compiler的源码。通过阅读代码我大致知道脚本文件是如何执行的,相信autoit也类似,所以请允许我以autoit作为描述的对象。

假设我们脚本中只有一句代码:WinActivate("QQ2012.exe")。解析的代码如下:
1)AutoIt3.exe读取脚本文件(一次读一行),接着对这一行进行词法分析。
2)找到了单词WinActivate,匹配关键词列表,检查是否是想要的关键词。WinActivate等,每个函数都有一个相对应的行为事件,供接下来调用。
3)如果是想要关键词(这里是WinActivate),检查它的参数:“QQ2012.exe”。(注意:参数是更加关键词的属性而定,有些关键词不需要参数。)
4)关键词和参数都已经得到,此时解释器已经知道了代码的行为。调用对应的事件对其进行处理。
5)查找进程列表,得到QQ2012.exe的进程号,然后通过windows api SetForegroundWindow激活窗口
好了,最简单的一个函数已经完成。其他功能估计也是大同小异,最终都是调用api来实现,从上面的过程来看,我们发现它不存在编译的过程。

Compiler又做了什么事情呢?
**** Hidden Message *****

运行test.exe的时候发生了什么?
**** Hidden Message *****
    到这里au3的机制也讲的差不多了。大家有什么意见请反馈,谢谢。

jkq920 发表于 2012-11-9 02:12:18

我来学习一下了。。。。

魔导 发表于 2012-11-9 06:43:19

额   高科技

wbcm 发表于 2012-11-9 07:44:39

谢谢,顶起哦!!!

rchockxm 发表于 2012-11-9 08:51:21

autohotkey後來的版本都把源碼存進resource裡
然後再去解析而已

邪恶海盗 发表于 2012-11-9 08:55:11

据说AU3属解释型语言,是把源码与解释器打包在一起的,所以容易反出来...

menfan1 发表于 2012-11-9 09:45:17

如何做好防止反编译才好哈

quasimodo 发表于 2012-11-9 10:08:52

原来我的代码外面只穿了件纸衣服。

seeyou 发表于 2012-11-9 10:20:49

回复 9# menfan1

我觉得迷惑已经差不多了,要看懂迷惑代码代价很高,看懂迷惑的人都具备把它重新实现的能力。还有可以把最核心的模块用其他语言实现,用dll的形式调用。

edisonx 发表于 2012-11-9 10:31:18

我還真沒想過運作機制,不過您說的情況 「包成 exe 後出錯還能指示哪行有問題」,
這在高階程式語言裡面,部份編譯語言具有這特性,如 C 語言裡之 assert 指令。

seeyou 发表于 2012-11-9 10:50:07

回复 12# edisonx
两者还是有一点区别的,assert是编码者主动写的,au3的错误提示是解释器完成的,编码者没有主观要求,这就说明了exe里面具有源码信息。

edisonx 发表于 2012-11-9 10:53:11

回复 13# seeyou

這麼說倒也是,漏了這點。

虫子樱桃 发表于 2012-11-9 11:06:13

回复 1# seeyou


    学习了,呵呵

xlj310 发表于 2012-11-9 11:13:19

学习一下,看看庐山真面目

haijie1223 发表于 2012-11-9 11:22:21

没看明白楼主想说什么。。。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 揭秘autoit3的运行机制和反编译原理