揭秘autoit3的运行机制和反编译原理
今天发这个帖子的目的在于和论坛里面的朋友交流一下学习心得,主要内容是围绕着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又做了什么事情呢?
本帖隐藏的内容需要回复才可以浏览
1)创建一个exe文件,假设为test.exe 2)把AutoItSC.bin拷贝到test.exe,此时AutoItSC.bin完全等于test.exe 3)对test.exe进行压缩(可选) 4)调用exearc库将源码写入test.exe,exearc是闭源库,所以无法知道它做了什么。 一个test.exe就完成了,悬念就在exearc做了什么,下面马上为你解答。
运行test.exe的时候发生了什么?
本帖隐藏的内容需要回复才可以浏览
一切结果都源自合理的猜测,在没有知道真相之前,我认为test.exe进程会读取自身空间的某个地址,也就是源码地址然后进行“反编译”,但是我没有发现这样的行为。而是发现了test.exe把自身当成一个文件读了进来。我不禁拍案叫到,这不是和脚本解析一模一样吗?的确一样。但是它读取的数据都是“乱码”并不是明文。我突然想到了a3x文件,然后通过很多对比实验发现所谓的exe文件 == bin + a3x。所以反编译exe就等于对a3x的反编译。 a3x不是一个编译文件,而是一个加密文件,它的组成结构是:头 + 校验码 + 密文 + 尾 的形式存在,以上结论都是通过实验进行推断。所以那些破解au3的人们并没有什么神秘之处,用心就能发现更多。但是我对如何解密源码兴趣不大,因为这个已经超出了我的领域。
到这里au3的机制也讲的差不多了。大家有什么意见请反馈,谢谢。
揭秘autoit3的运行机制和反编译原理的更多相关文章
- .net反编译原理
目录 目录 前言 ILdasm ILasm 结语 推荐文献 目录 NLog日志框架使用探究-1 NLog日志框架使用探究-2 科学使用Log4View2 前言 本来没有想写反编译相关的文章,但是写着写 ...
- 转载:微信小程序源码提取反编译
转载来源:www.51xuediannao.com/xiaochengxu/019c08cc.html 一.前言 微信小程序源码提取反编译,听起来很屌,其实还是简单的,基本是傻瓜式操作.要想拿到微信小 ...
- Android反编译(二)之反编译XML资源文件
Android反编译(二) 之反编译XML资源文件 [目录] 1.工具 2.反编译步骤 3.重新编译APK 4.实例 5.装X技巧 6.学习总结 1.工具 1).反编译工具 apktool http ...
- 7 款开源 Java 反编译工具
今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...
- 7款开源Java反编译工具
今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...
- Java 反编译工具下载
反编译,通俗来讲,就是将.java 文件经过编译生成的 .class 文件还原.注意这里的还原不等于 .java 文件.因为Java编译器在编译.java 文件的时候,会对代码进行一些处理. 那么接下 ...
- java常见反编译工具
1.Java反编译插件 —— Jadclipse JadClipse是Jad的Eclipse插件,是一款非常实用而且方便地Java反编译插件,我们只需将下载的插件包复制到eclipse的plugins ...
- exe4j生成的exe反编译成java代码
很早以前写了一个java串口小程序,现在只有exe4j打包后的源程序了,最近又要用,折腾了一下发现其实要找回来也很简单,这里记录一下,以免以后忘记. exe4j只是将java程序,使用自己的方式打包了 ...
- java 对象 拆箱装箱 编译和反编译的验证
创建对象 package 创建对象的个数; public class main { public static void main(String[] agrs){ Check c1=new Check ...
随机推荐
- 吴裕雄 人工智能 java、javascript、HTML5、python、oracle ——智能医疗系统WEB端智能分诊代码简洁版实现
<%-- Document : getInfo Created on : 2018-10-7, 21:36:37 Author : acer --%> <%@page import= ...
- 获得APP的包名package和activity
方法一: Aapt dumpbadging xxxx.apk(包的路径) 第一个框为包名 第二个框为主Activity名 方法二: 如果你装了Appium 可以这么操作下 进入设置页,选择APK 路 ...
- 【C语言】编写程序,输出以下图形
编写程序输出以下图形: * ** *** **** ***** 代码: #include <stdio.h> int main() { int i, j; ; i <= ; i++) ...
- 点击<a href="#">阻止自动跳转到顶部方法
最近开发web项目,遇到一个问题 ,就是在<a>标签加href="#",并增加onclick事件,页面会自动在点击该标签绑定的元素时,自动跳转到页面顶部,在网上寻求了一 ...
- combotree(组合树)的使用
一.前言: 组合树(combotree)把选择控件和下拉树结合起来.它与组合框(combobox)相似,不同的是把列表替换成树组件.组合树(combotree)支持带有用于多选的树状态复选框的树. 二 ...
- 19 JavaScript数组 &数组增删&最值&排序&迭代
关联数组(散列) 关联数组又叫做散列,即使用命名索引. JavaScript数组只支持数字索引. JavaScript对象使用命名索引,而数组使用数字索引,JavaScript数组是特殊类型的对象. ...
- SprintBoot学习(一)
Spring Boot是什么? 1. SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以 Sprin ...
- 杭电 2013 猴子吃桃 递归解法&循环解法
题目估计看到过3次不止了,所以还是想复习下递归的运用. 奉上递归代码: #include <iostream> #include<math.h> #include <io ...
- C++判断txt文件编码格式
转载:https://blog.csdn.net/kikityan/article/details/89923808 记事本打开txt文件,然后另存,有四种编码格式可供选择,分别是:ANSI ...
- 集成PHP应用和SOLR
集成 PHP 应用和 Solr 搜索引擎 您的评价: 收藏该经验 你为什么需要搜索引擎?单纯数据库不够用?如果你只是创建小网站,数据库就够了.但当你创建中性或大型应用的时 ...