欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]TC5.0 (一个脚本开发工具)其底层实现原理分析与推测(半成品)

[原创]TC5.0 (一个脚本开发工具)其底层实现原理分析与推测(半成品)

发送此贴的原因也算是回馈论坛了,毕竟自己一直潜水学习了很多大大(来至于不同地方)的知识。作为一个新手,很感激各位大佬的知识。

起因

由于某些原因,在周五第一次接触到了这样一个脚本,而这个脚本的逆向,有些棘手。其运行行为特征也非常奇怪,和之前的纯c&c++加上壳子完全不一样,首先肯定是vc++的一个程序其中混杂了相关的加密内容。
PE工具分析出来如下图(类似,这个test_en是我写的生成的):
(有混淆就混淆吧,挡不住f7大法)

然后long long time 的查找资料,终于在网络上发现了这个脚本的一些有意义的特征。
这个脚本是用TC工具生成的,我第一次听说TC这个工具,和他类似的按键精灵和易语言我都听过。
是我孤陋寡闻了,也印证了学习的必要性。接下来就是查找安装这个TC工具(为啥要下5.0,因为5.0是我在官网找到的最老的版本了,越老越容易暴露特征),安装后自己创建一个工程如下图(对我来说使用他贼简单,已有其他语言编程基础):(本文文末提供所有本文工具下载)

这里我发现了一个有意思的地方,tc作者实现的这套语言集成化极高,但是扩展性等于0,这样有个好处就是实现的原理会简单一些吧,我猜的。
可能有人会问:为啥我要去找这个开发工具写一个test程序,因为我想吐槽一下这个tc的官方论坛贼差劲,tc的逆向资料等于空白,我不知道是不是有人有但是不分享吧。我作为一个小白,我想要 逆向掉这样一个脚本,我必须要了解其生成的程序的原理,包含运行原理和他这门语言的实现原理。(说实话,可能是我太自信了,但是没办法啊,逆向资料太少了)。
还有这里我在想吐槽一句:tc这个我感觉网上很多人的资料都是用来做脚本,从来没有人介绍一下这个工具的底层运行原理。并且官方都没有任何资料解释其原理的,都是卖脚本的,感觉有种闭门造车的感觉,一个语言要发展,社区一定要活跃,否则就呵呵。
到这里,其实我周五想逆向的脚本已经被我抛开了,我只想知道tc这套框架的实现底层原理,我觉得挺有意思的,关键网上资料还少,挺有挑战性。
说不定我掌握这样的原理,我也能实现一个自己的语言出来,不一定要全,一定要专,这样我写的程序给别人逆向的话,可以挡住80%的逆向人员(靠工具自动化的),就像我这样的小白,还有20%的人能手动分析的,只要有功夫,什么都能分析的,拦不住的。(我感觉我已经十分的膨胀了,想自己创造一种语言出来。{:301_997:} {:301_997:} {:301_997:} )(关于上文怎么分析出来脚本是tc写的,请听我慢慢道来)

正文

在我之前学习win的逆向的时候,就是字节写一个简单的win32弹框程序进行分析,直接拉入od,分析起来,很舒服,因为跟明文差不多(:lol 因为没有加壳)
同样,这里我把我写的test_en.exe拉入od,运行,分析。

tc程序特征锁定

拉入od,点击确定按钮,弹了一个框出来,暂停,看调用堆栈,不用怀疑,出现了两个明显的特征dll,TLib.dll和TApi.dll。为什么我说它是特征dll,我们可以在tc5的安装目录发现这两个dll,我也在周五的脚本发现了这两个dll,由此可以猜测,这个程序是tc写的。(其实理由有点牵强,但是我可以继续往下分析验证我的观点)

查看程序运行的依赖:

这里我还有一条证据:
在tc开发工具的安装目录的tlib和test_en释放的tlib做md5验证,一样的文件。

tc程序运行行为特征分析(目标就是想让我写的程序点击开始按钮后,执行messagebox("!!!!!========"))

通过观察周五的脚本和我写的test_en.exe的开始运行过程中,在OD里面我发现了其会释放TApi和TLib这两个库到用户程序临时目录(因为我发布的test_en.exe不包含任何exe,说明这两个dll是打包到可执行文件中了的)。
根据我写的tc脚本程序。
[mw_shlcode=cpp,true]//开始按钮点击操作
function start_click()
var btn_start_content = "点击开始TEST"
var btn_start_title_msg = "提示"
messagebox(btn_start_content, btn_start_title_msg)

var btn_test1="AAAAAAAAAAA"

if(0 == strcmp(btn_start_content, btn_start_title_msg))

    var btn_test2="BBBBBBBBBBB"

    messagebox("========")

else

    var btn_test3="CCCCCCCCCCC"

    messagebox("!!!!!========")

end

end

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功