标题: 一个加壳的批处理竟无法破解(已结)
[打印本页]
作者: jonsonqf
时间: 2008-6-29 15:18
标题: 一个加壳的批处理竟无法破解(已结)
前段时间看到批处理加解密的大讨论,批处理是难真正的加密的,一般都可以在临时文件夹找到源码,但是今天恰好看到这个加壳的exe,竟然无法找到源码,请有兴趣的朋友一起研究下。
貌似帖子中无法上传附件,我已经把附件上传到论坛的上传系统那里了,下载地址是:
(已结,多谢下面回复的几位朋友)
[
Last edited by jonsonqf on 2008-7-2 at 10:30 AM ]
作者: plp626
时间: 2008-6-29 15:44
那个用汇编写的bat2exe.com转换后的exe不生成临时文件,非一般方法可以得到源码
作者: knoppix7
时间: 2008-6-29 16:04
用Ollydbg打开EXE. 插件=> Ollydump=K.O.
作者: quya
时间: 2008-6-29 16:37
我似乎尚未发现有哪款BAT转EXE的工具能真正隐藏bat源文件。加壳的也一样。
除非源程序没有交互式的界面,而且执行速度非常快,快到你找到源文件来不及复制它就自动删除了。
所以找到源文件的简单办法就是, 执行转换了的exe文件,等到程序要你输入的时候,不理它, 到%tmp%目录找,总是能找到, 有时候还是隐藏的。
为了方便找到,在运行之前可以先清一下%tmp%目录, 把隐藏文件的选项关闭。
也许我孤陋寡闻, 所以希望哪个高手提供我一个如楼主说的找不到源文件的转换程序。(我无法下载楼主的附件,但我看了3楼帖的源码,相信在临时文件夹几乎能找到源码,因为那是个有交互界面的程序)
谢谢!
另外对于那些没有交互界面,执行速度较快的文件, 也许可以用下面的思路来抓住它。
编一个拷贝程序,加上一定的延时(延时多少视转换的执行程序的速度而定),不停的从%tmp%目录向不同目录拷贝, 然后启动那个程序,很有可能就抓住它了, 一次不行可以试多次。
[
Last edited by quya on 2008-6-29 at 09:44 PM ]
作者: mountvol
时间: 2008-6-29 16:56
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
autorun="dir *.bat&pause"
或者可以直接拷贝到你想拷贝的地方。
作者: knoppix7
时间: 2008-6-29 19:39
我说下我的结果吧.
利用If 进行命令注入的时候尝试过 Call type "%~0"
但是.这个值为空.%cd%指向执行目录.
所以..我怀疑..这个Bat执行时没有临时文件.
过几天试试filemon看看.
作者: jonsonqf
时间: 2008-6-29 21:09
Quote: |
Originally posted by quya at 2008-6-29 04:37 PM:
我似乎尚未发现有哪款BAT转EXE的工具能真正隐藏bat源文件。加壳的也一样。
除非源程序没有交互式的界面,而且执行速度非常快,快到你找到源文件 ... |
|
佩服下3楼先,不过我这边临时文件夹temp确实是找不到这个的,我相信3楼应该不是在临时文件夹找到的吧?请恕我比较菜,不知道3楼的这位朋友能不能说明白一点呢?非常感谢你的解答!
[
Last edited by jonsonqf on 2008-6-29 at 09:13 PM ]
作者: jonsonqf
时间: 2008-6-29 21:10
Quote: |
Originally posted by knoppix7 at 2008-6-29 07:39 PM:
我说下我的结果吧.
利用If 进行命令注入的时候尝试过 Call type "%~0"
但是.这个值为空.%cd%指向执行目录.
所以..我怀疑..这个Bat执行时没有临时文件.
过几天试试filemon看看. |
|
他如果没有临时文件的话,那天怎么执行的呢?他这个应该本来就是个批处理吧?
作者: quya
时间: 2008-6-29 21:47
Quote: |
Originally posted by jonsonqf at 2008-6-29 09:10 PM:
他如果没有临时文件的话,那天怎么执行的呢?他这个应该本来就是个批处理吧? |
|
凡是批处理的开头有
@shift
这一句的,肯定是从临时文件夹里找出来的, 源文件都没有这句!
我已经尝试了很多办法,都无法不生成临时文件!
请你按照我5楼的办法仔细找, 其实只要按照我的办法,用不着仔细找,应该说轻而易举就可以找到。
作者: jonsonqf
时间: 2008-6-29 22:26
Quote: |
Originally posted by quya at 2008-6-29 09:47 PM:
凡是批处理的开头有
@shift 这一句的,肯定是从临时文件夹里找出来的, 源文件都没有这句!
我已经尝试了很多办法,都无法不生成临 ... |
|
多谢这位朋友的帮忙,开头的@shift这个确实和平常不同的,我找到他释放的文件了,我也奇怪,我知道的也是没有不释放的。
但是,朋友,我传上来的这个比较特殊,其实也不算特殊,只是用了其他的小把戏,我建议你下载下来研究下,对你不无裨益的,呵呵。这个释放的目录不是在临时文件夹下的哦,难怪我之前找不到了
顺便我想请教下,开头的这个@shift这个的作用我不是很理解,是为了解释什么命令么?
[
Last edited by jonsonqf on 2008-6-29 at 10:29 PM ]
作者: quya
时间: 2008-6-29 22:41
Quote: |
Originally posted by jonsonqf at 2008-6-29 10:26 PM:
多谢这位朋友的帮忙,开头的@shift这个确实和平常不同的,我找到他释放的文件了,我也奇怪,我知道的也是没有不释放的。
但是,朋友,我传 ... |
|
我无法下载,虽然我很想知道。
我想他可能用某种办法改变了TMP目录,最后运行完毕再改回来。
作者: dikex
时间: 2008-6-29 23:32
运行某批处理时,执行下面的命名即可找出对应的批处理文件在哪里了
wmic process where name="cmd.exe" get commandline
shift 能把%0 参数改变,可能用于防止某些利用%0 取得当前批处理路径的方法
作者: quya
时间: 2008-6-29 23:59
谢谢楼主, 我下载下来看了看。 他的临时文件还是在 %tmp%目录中,它先WINRAR自解压, 然后释放一个cmd文件,不过这个CMD的第一个字符估计是带特殊字符的,所以在Window界面无法看到,但在DOS命令行可以看到。
文件名的形式是 ?cmd????.cmd (第一个看不到,最后4个字符随机)
然后我就 ren *.cmd 1.cmd, 打开1.cmd 就完事了。
[
Last edited by quya on 2008-6-30 at 12:03 AM ]
作者: jonsonqf
时间: 2008-6-30 01:06
Quote: |
Originally posted by quya at 2008-6-29 11:59 PM:
谢谢楼主, 我下载下来看了看。 他的临时文件还是在 %tmp%目录中,它先WINRAR自解压, 然后释放一个cmd文件,不过这个CMD的第一个字符估计是带特殊字 ... |
|
呵呵,是的,我也找到了,不过我现在想的是怎么可以确切的得知他这个第一个字符是什么,我用了attr看了,是个很特殊的字符,我现在有几个疑问:
1.他是怎么建立这个特殊字符的文件夹,也就是说怎么打出来这个字符的,那个字符我用attr看了,好像是y是吗有2点的
2.这个文件夹既然用了这种方法隐藏了(我想应该是利用了attr的加隐藏属性),但是为什么还可以执行呢?就是@shift这句话的作用?
3.我前段时间用了一些加密工具加密,但是有些加密工具加密后,可以运行,但是加壳后却无法运行了
作者: jonsonqf
时间: 2008-6-30 01:12
Quote: |
Originally posted by dikex at 2008-6-29 11:32 PM:
运行某批处理时,执行下面的命名即可找出对应的批处理文件在哪里了
wmic process where name="cmd.exe" get commandline
shift 能把%0 参数改变,可能用于防止某些利用%0 取得当前批处理路径的方法 |
|
又学到了一招,非常感谢这位朋友的指点
另外想请教下,对于“shift 能把%0 参数改变,可能用于防止某些利用%0 取得当前批处理路径的方法”这句话不解,利用%0可以取得当前批处理路径?具体的操作是?
因为偶比较的菜,诚心请教,还望可以再次指点一二,谢谢!
作者: dikex
时间: 2008-6-30 01:25
运行一下这个东西:
@echo off
echo %0
pause
作者: quya
时间: 2008-6-30 08:34
Quote: |
Originally posted by dikex at 2008-6-29 11:32 PM:
运行某批处理时,执行下面的命名即可找出对应的批处理文件在哪里了
wmic process where name="cmd.exe" get commandline
shift 能把%0 参数改变,可能用于防止某些利用%0 取得当前批处理路径的方法 |
|
恰恰相反,我的看法是:
加@shift不是为了防止破解者获得执行文件路径, 而是它自身需要获得执行文件的原来路径和源文件名。否则程序可能会运行出错。
这也是为什么临时生成的批处理文件都有这句的原因。
作者: jonsonqf
时间: 2008-6-30 12:20
Quote: |
Originally posted by quya at 2008-6-30 08:34 AM:
恰恰相反,我的看法是:
加@shift不是为了防止破解者获得执行文件路径, 而是它自身需要获得执行文件的原来路径和源文件名。否则程序可能会运行出错。
这也是为什么临时生成的批处理文件都有这句的原因。 |
|
呵呵,其实我同意quya的这个观点,其实如果这个加壳的exe是在硬盘上,他是不会释放到临时文件夹的,而是会释放到和他同目录的文件夹中,如果这个是放在不可写的iso内的话,才会释放到临时文件夹。有些批处理加了壳之后,无法运行了,我想@shift应该是为了读取,呆会测试下就知道了,去掉后看看能不能读取
作者: jonsonqf
时间: 2008-6-30 12:23
quya,能不能麻烦回答下15楼的第一个问题呢?谢谢
作者: jonsonqf
时间: 2008-6-30 21:23
顶下,让quya看到o(∩_∩)o...
作者: quya
时间: 2008-6-30 21:35
Quote: |
Originally posted by jonsonqf at 2008-6-30 09:23 PM:
顶下,让quya看到o(∩_∩)o... |
|
我看到了, 但我无法回答你的问题, 对不起。
这个应该是BAT转EXE的转换程序搞的花样, 这个程序的作者比其他的高明, 至少能蒙我们一下子。
我也想知道哪儿能找到此程序,至少也能蒙其他人一下。
作者: jonsonqf
时间: 2008-6-30 22:08
Quote: |
Originally posted by quya at 2008-6-30 09:35 PM:
我看到了, 但我无法回答你的问题, 对不起。
这个应该是BAT转EXE的转换程序搞的花样, 这个程序的作者比其他的高明, 至少能蒙我们一下子。
我也想知道哪儿能找到此程序,至少也能蒙其他人一下。 |
|
哈哈,没关系,确实这个程序比较好蒙人,那就希望有其他朋友用过的分享这个加密程序了
作者: knoppix7
时间: 2008-6-30 22:13
bat2exe.
OllyDump对付它无敌.
作者: 313885174
时间: 2008-6-30 22:17
用第三方的任务管理器也没用?
作者: wxcute
时间: 2008-7-1 13:57
这个加壳的释放的P名字也很有特点,
在我的机子上Win系统下看不到,显示系统文件加显示隐藏文件也看不到。
只能cmd下dir
环境:NTFS文件系统,XP SP2
setup.exe释放*.cmd到同目录下
文件名是[ CMD9C56.CMD]不含中括号,开头有个Unicode字符。
作者: knoppix7
时间: 2008-7-1 17:34
不会利用文件名做删除标记.然后骗过Explore?
作者: wxcute
时间: 2008-7-1 19:34
Quote: |
Originally posted by knoppix7 at 2008-7-1 17:34:
不会利用文件名做删除标记.然后骗过Explore? |
|
还真不会,我搜索下先。
作者: 19951001
时间: 2008-7-1 19:49
在临时文件夹中找到了 bat 文件,内容如下:
......
根据楼主的要求,批处理内容已经删除。
[
Last edited by 19951001 on 2008-7-5 at 05:01 PM ]
作者: knoppix7
时间: 2008-7-1 21:15
实在Sorry..
touchnet吞掉了一个会..
会不会
非常抱歉-0-
作者: ZJHJ
时间: 2008-7-2 23:30
只要先运行SETUP.exe,再搜索生成的*.bat或*.cmd,就会找到释放的文件路径.并没有在临时文件夹中这个加壳工具有个特点,就是释放的文件会深度隐藏.无法看到实体.所以无法打开, 不过,想个办法,用命令可把他的原文搞到手. (方法很多,只要有文件路径)哈哈藏得再深,也要你显出原码
@shift
@echo off
color 2e
set prog=winpe 硬盘安装工具
set l1= ╭─────────────╮
set l2= ╭────┤ winpe 硬盘安装工具 ├────╮
set l3= │ ╰─────────────╯ │
set l4= │============================================ │
set l5= │ 盛世雄风技术论坛 │
set l6= ╰───────────────────────╯
title %prog%
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%i:\recycler\nul set lastdr=%%i:
for %%i in (z y x w v u t s r q p o n m l k j i h g f e d c) do if exist %%i:\boot.ini set rp=%%i:
if "%rp%"=="" goto nosys
if exist %rp%\ldrxpe goto :existpe
if exist %rp%\wxpe\ goto :existpe
find /i "c:\wxpe\ssxf.org" %rp%\boot.ini >nul
if %errorlevel%==0 goto :existpe
goto start
:existpe
cls
echo %l1%
echo %l2%
echo %l3%
echo │ 检测到您机器中已经安装了 winpe,您要卸载吗? │
echo │ [1] 卸载 winpe,并重新安装 │
echo │ [2] 卸载 winpe,并退出安装 │
echo │ [q] 退出安装 │
echo %l4%
echo %l5%
echo %l6%
echo.
set choice=
set /p choice= 请选择要进行的操作 (1/2/q) ,然后按回车:
if %choice%choice==choice goto :existpe
if not '%choice%'=='' set choice=%choice:~0,1%
if /i '%choice%'=='1' set choi=1&&goto :uninstall
if /i '%choice%'=='2' goto :uninstall
if /i '%choice%'=='q' exit
goto :existpe
:uninstall
if exist %rp%\ldrxpe attrib -s -h -r %rp%\ldrxpe && del /q /f %rp%\ldrxpe >nul
if exist %rp%\wxpe attrib -s -h -r %rp%\wxpe && rd %rp%\wxpe /s /q>nul
if exist %lastdr%\wxpe attrib -s -h -r %lastdr%\wxpe && rd %lastdr%\wxpe /s /q>nul
attrib %rp%\boot.ini -s -h -r
if exist %rp%\boot.bak (
attrib %rp%\boot.bak -s -h -r
type %rp%\boot.bak|find /i /v "c:\wxpe\ssxf.org">%rp%\boot.ini
) else (
copy %rp%\boot.ini %rp%\boot.bak /y>nul
type %rp%\boot.bak|find /i /v "c:\wxpe\ssxf.org">%rp%\boot.ini
)
copy %rp%\boot.ini %rp%\boot.bak /y>nul
if exist %rp%\boot.bak attrib -s -h -r %rp%\boot.bak&&del %rp%\boot.bak>nul
attrib %rp%\boot.ini +s +h +r
if %choi%choi==1choi (echo.&&echo 卸载完成,请按任意键准备安装 。。。&&pause>nul&&goto start)
echo.&&echo 卸载完成,请按任意键退出 。。。
pause>nul
exit
:start
cls
echo.
echo %l1%
echo %l2%
echo %l3%
echo │ [1] 安装winpe到硬盘 │
echo │ [q] 退出安装 │
echo %l4%
echo %l5%
echo %l6%
set choice=
set /p choice= 请选择要进行的操作 (1/q) ,然后按回车:
if %choice%choice==choice goto start
if not '%choice%'=='' set choice=%choice:~0,1%
if /i '%choice%'=='1' goto install
if /i '%choice%'=='q' exit
goto start
:install
set boot=%rp%\boot.ini
echo.
echo 正在复制文件,请稍候 。。。
md %rp%\wxpe\
md %lastdr%\wxpe\
copy setupldr.bin %rp%\ldrxpe /y >nul
copy ssxf.org %rp%\wxpe\ /y >nul
copy ssxf %rp%\wxpe\ /y >nul
copy winpe.is_ %rp%\wxpe\ /y >nul
if exist winpe.ini copy winpe.ini %lastdr%\wxpe\ /y >nul
if exist op.wim copy op.wim %lastdr%\wxpe\ /y >nul
attrib -s -h -r %rp%\boot.ini
if exist %rp%\boot.bak attrib -s -h -r %rp%\boot.bak
copy %rp%\boot.ini %rp%\boot.bak >nul
type %rp%\boot.bak|find /i /v "c:\wxpe\ssxf.org">%rp%\boot.ini
echo c:\wxpe\ssxf.org="winpe 应急维护系统">>%rp%\boot.ini
type %rp%\boot.ini>%rp%\bot.bak
type %rp%\bot.bak|find "boot loader" /i>%rp%\boot.ini
echo timeout=5 >>%rp%\boot.ini
type %rp%\bot.bak|find "boot loader" /i /v|find "timeout" /i /v>>%rp%\boot.ini
attrib +s +h +r %rp%\boot.ini
@del %rp%\bot.bak >>nul
attrib +s +h +r %rp%\boot.ini
attrib +s +h +r %rp%\boot.bak
attrib +s +h +r %rp%\ldrxpe
attrib +s +h +r %rp%\wxpe
attrib +s +h +r %rp%\wxpe\*.*
attrib +s +h +r %lastdr%\wxpe
attrib +s +h +r %lastdr%\wxpe\*.*
goto :success
:nosys
echo %l1%
echo %l2%
echo %l3%
echo │ 好像您的机器中没有安装操作系统哦 │
echo │ 请确认后再执行本安装程序。 │
echo %l4%
echo %l5%
echo %l6%
echo.
echo 请按任意键退出 。。。
pause >nul
exit
:success
echo.
echo 恭喜!!
echo.
echo 已经成功将镜像 winpe 安装到您的 %rp% 盘。
echo.
echo 请按任意键退出 。。。
pause >nul
exit
------------------------
谁知道这个加壳工具是什么名字? 我感觉还算是目前较好的.(虽然被破了....)
[
Last edited by ZJHJ on 2008-7-4 at 12:43 PM ]
作者: wjdidi
时间: 2008-7-7 15:41
从这个贴子学到不少东西啊
作者: qzwqzw
时间: 2008-7-8 12:41
根据我的分析
那句@shift是没用且有害的蛇足之笔
因为程序在释放出批处理源码后
是使用以下方式来调用批处理的
cmd /c "批处理名 批处理所需命令行参数"
如果以 setup.exe 1 2 3 4 5 6 7 8 9 的方式执行加密程序
执行至批处理内部后
环境变量 cmdcmdline 为 cmd /c "" CMD5254.CMD" 1 2 3 4 5 6 7 8 9"
命令行参数矩阵 %* 为 1 2 3 4 5 6 7 8 9
命令名 %0 为 " CMD5254.CMD"
命令行参数1 %1 为 1
其余参数依次排列
其中的批处理文件名是以 (0xA0)CMD 起始
再加随机的四位十六进制数组成
而在 @shift 之后
cmdcmdline、%*均不变
唯一变化的是 %0 ~ %9
也就是 %0 变为 1
%1 变为 2
其余依次排列
可见在@shift之后
本来是命令名的%0变为了命令行参数1
而当在程序中使用 %0 引用批处理自身时
就是出错!