2023年12月3日发(作者:)
更多相关信息请访问--/Blast'sSecurityNSIS简单调试(执行程序部分)前:这篇文章只算得上是一点小笔记,如果你碰到了一个NSIS打包的恶意文件却不知道它是怎么被执行起来的,可以看看这篇文章,关于更深入的部分,我水平不足,还是交由高手们去打理吧^_^。水准:初级QQ50189695主页一.NSISNullsoft脚本安装系统(英语:NullsoftScriptableInstallSystem,(NSIS))为一个开放源代码脚本驱动的封装安装档用工具。可以用其脚本语言自定安装的流程,同时支援多种语系的安装接口。特色:可脚本控制,多国语系的安装接口,可用C,C++,或Delphi写出NSIS的外挂(Plugins),支援ZLib,BZip2,LZMA这三种压缩方式,支援网络安装模式与档案Patching,相容于目前的所有主要的Windows版本介绍来源:/zh-cn/NSIS官方网站:/Main_Page二.NSIS执行程序的命令NSIS执行程序有哪些命令呢?帮助手册中提到有Exec、ExecShell、ExecWait。下面是帮助手册中对他们的介绍,在每段介绍后我会稍稍的翻译一下。与之前段落重复部分不翻译了。4.9.1.2Exec邮箱50189695@作者BlastXiangNullsoft脚本安装系统NSIS安装器开发Nullsoft最新版本2.46/2009-12-05(4个月前)操作系统Windows,POSIX类型安装程式许可协议zlib/libpnglicense网站文章由Blast编写/更多相关信息请访问--/Blast'satthefilespecifiedmustexistonthetargetsystem,notthecompilingsystem.$,:Exec'"$"parameters'.Ifyoudon''"$"'Exec'"$"someparameters'4.9.1.2Exec语法:Exec[参数]执行指定程序并立即继续。注意,指定的文件必须在目标系统(即安装程序会在其上执行的系统)而非编译系统(即编写代码者的系统)。$OUTDIR用来指定工作目录。如果程序无法执行,将会设置一个错误标志。注意,如果命令包含空格,你应该使用引号来把它与其他参数分割开。如果你不把他们放在引号里面,在9x系统上不论有没有参数都不会运行。4.9.1.3ExecShellactioncommand[parameters][SW_SHOWDEFAULT|SW_SHOWNORMAL|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_HIDE]atactionisusually"open","print",etc,tersandtheshowtypeareoptional.$ell"open""/"ExecShell"open""$"ExecShell"print""$"4.9.1.3ExecShellactioncommand[parameters][SW_SHOWDEFAULT|SW_SHOWNORMAL|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_HIDE]执行指定的程序,使用ShellExecute。注意,action通常为open,print等等(即ShellExecute的Operation参数所允许的参数),但是也可以传入空字串,表示默认动作。参数和showtype(显示类型)都是可选的。4.9.1.4ExecWaitcommand[user_var(exitcode)]tputvariableisspecifiedExecWaitsetstheerrorflagiftheprogramexecutedreturnsanonzeroerrorcode,tputvariableisspecified,ExecWaitsetsthevariablewiththeexitcode(andonlysetstheerrorflagifanerroroccurs;ifanerroroccursthecontentsoftheuservariableareundefined).Note,:ExecWait'"$"parameters'.Ifyoudon'tputitinquotesitwillnotworkonWindows9xwithor文章由Blast编写/更多相关信息请访问--/Blast'it'"$"'ExecWait'"$"'$0DetailPrint"someprogramreturned$0"4.9.1.4ExecWaitcommand[user_var(exitcode)]执行指定程序且一直等待到程序执行完、退出。(参阅Exec以获取更多消息)如果,没有指定输出参数且程序执行后返回一个非零错误码或是存在错误时,程序会设置错误标记。如果指定了输出参数,ExecWait将设置退出代码(并且仅在错误发生时、用户相关变量未定义时设置错误标记)。三.这三条命令对应的APINSIS使用两种Win32API,分别为ShellExecute(对应ExecShell)和CreateProcess(对应Exec、ExecWait)。即使认为Exec使用的是WinExec也无妨,因为WinExec最终还是调用CreateProcess函数。四.ShellExecute和CreateProcess的真身?可以建立一个简单的C程序,然后调试一下就知道了,如BCB,void__fastcallTForm1::FormCreate(TObject*Sender){LPCTSTRa;STARTUPINFOStartupInfo;PROCESS_INFORMATIONProcessInfo;rved=NULL;e="";top="";=CW_USEDEFAULT;=CW_USEDEFAULT;e=CW_USEDEFAULT;e=CW_USEDEFAULT;indow=SW_SHOW;rved2=0;rved2=NULL;=sizeof(StartupInfo);a="testshellexecute";ShellExecute(NULL,"open","","","",SW_SHOW);a="testcreateprocess";CreateProcess("c:","",NULL,NULL,TRUE,CREATE_DEFAULT_ERROR_MODE,NULL,NULL,&StartupInfo,&ProcessInfo);a="testwinexec";WinExec("",SW_SHOW);}文章由Blast编写/更多相关信息请访问--/Blast'sSecurity可以在BCB中直接调试,也可生成exe之后快速地使用OD的字串参考,定位到testshellexecute行下断,每个函数跟进去一看00401BBF|.C745F492314>mov00401BC6|.6A0500401BC8|.68B3314000pushpushpushpushcallF4pushdwordptr[ebp-C],004031925push004031B3;|Parameters="";|;|;|hWnd=NULL;ShellExecuteA004031B4;testdwordptr[ebp-C],;;/IsShown=5;|testcreateprocessc:00401BCD|.68B231400000401BD2|.68A931400000401BD7|.68A431400000401BDC|.6A0000401BDE|.E8ED0E000000401BE3|.C745004031B2004031A9004031A40


发布评论