[問題] system() 無法貫連執行

看板C_and_CPP (C/C++)作者 (嘎嘎嘎嘎嘎)時間15年前 (2010/09/30 01:15), 編輯推噓3(3045)
留言48則, 5人參與, 最新討論串1/1
我想用C++寫一個 bat 轉 exe 的程式 目的就是隱藏批次檔的code 但是 system() 執行完結果就沒了 不能模擬bat 例如以下程式不能work system("set a=hello world"); system("echo %a%"); //忘掉上一行 system("cd .."); system("dir"); //忘掉上一行 用換行符號包成一個也不行 system("set a=hello world\necho %a%\ncd ..\ndir"); 頂多創一個temp.bat再 system("temp.bat") 這樣就沒達到目的了 是否有函式可以連續執行不會忘 或是達成目的 隱藏批次檔的code 的方法?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.118.138

09/30 01:28, , 1F
attrib 指令
09/30 01:28, 1F

09/30 01:34, , 2F
attrib 指令??
09/30 01:34, 2F

09/30 01:35, , 3F
你用的 dir、cd 都是在DOS 命令提示字元的指令阿, 其
09/30 01:35, 3F

09/30 01:35, , 4F
喔~可是我想說隱藏批次檔的code 不是指隱藏屬性
09/30 01:35, 4F

09/30 01:35, , 5F
中有一個指令可以設定檔案屬性
09/30 01:35, 5F

09/30 01:37, , 6F
整個批次檔變不見你的code不就沒了= = 再下個 REM 把
09/30 01:37, 6F

09/30 01:38, , 7F
他刪掉也好阿
09/30 01:38, 7F

09/30 01:38, , 8F
是指影藏在exe讓別人看不到 除非他反組譯我的程式
09/30 01:38, 8F

09/30 01:39, , 9F
或是他看的董機器碼
09/30 01:39, 9F

09/30 01:39, , 10F
一直穿插= =
09/30 01:39, 10F

09/30 01:41, , 11F
你可以把temp.bat加密 用你的程式解密後system執行 XD
09/30 01:41, 11F

09/30 01:41, , 12F
那就用 && 把指令串起來吧
09/30 01:41, 12F

09/30 01:45, , 13F
&&好像可行 就走&&路線好了 謝啦
09/30 01:45, 13F

09/30 01:46, , 14F
解密後用system執行 還是不連貫...
09/30 01:46, 14F

09/30 01:47, , 15F
不過變數的問題好像沒辦法解決就是 XD
09/30 01:47, 15F

09/30 01:49, , 16F
原因可能在每一次呼叫system給完指令他就關掉的關係
09/30 01:49, 16F

09/30 01:49, , 17F
想說會不會有人推說 用內建函數system2()就好啦
09/30 01:49, 17F

09/30 01:49, , 18F
果然沒有這麼好康的事
09/30 01:49, 18F

09/30 01:51, , 19F
1. fopen 一個 bat 檔
09/30 01:51, 19F

09/30 01:51, , 20F
2. 將指令用 fputs 寫到 bat 檔內
09/30 01:51, 20F

09/30 01:51, , 21F
3. system 那個 bat 檔
09/30 01:51, 21F

09/30 01:51, , 22F
4. system 完 unlink 那個 bat 檔
09/30 01:51, 22F

09/30 01:55, , 23F
原po就是不想用bat檔去跑... Orz
09/30 01:55, 23F

09/30 01:57, , 24F
跑完就刪掉咩 XD 他是不想存在一個現成的 bat 檔吧
09/30 01:57, 24F

09/30 01:58, , 25F
動態產生 跑完刪掉 不知道可不可以接受 XD
09/30 01:58, 25F

09/30 01:58, , 26F
這我也提過呀 0.0 好像硬要把他燒在程式碼裡, 上一篇
09/30 01:58, 26F

09/30 01:59, , 27F
也是醬 0.0
09/30 01:59, 27F

09/30 02:01, , 28F
沒錯 我就是想硬燒在程式碼裡...@@
09/30 02:01, 28F

09/30 02:03, , 29F
因為產生檔案就沒辦法完全影藏 有心人還是可以把code抓出
09/30 02:03, 29F

09/30 02:04, , 30F
假如我就是那個有心人 我會用開RegShot軟體
09/30 02:04, 30F

09/30 02:04, , 31F
看這個exe有在哪裡產生哪些檔案 做了什麼改變
09/30 02:04, 31F

09/30 02:05, , 32F
其實我用文字編輯器也可以大概看出你的執行檔做了啥 lol
09/30 02:05, 32F

09/30 02:05, , 33F
有這個必要嗎 = =||
09/30 02:05, 33F

09/30 02:05, , 34F
可能發現在某處瞬間產生temp.bat 之後再想辦法留住那bat
09/30 02:05, 34F

09/30 02:07, , 35F
真的假的 可以用文字編輯器 看執行檔做什麼?? 怎麼做的??
09/30 02:07, 35F

09/30 02:07, , 36F
不知道 win32 有沒有 popen 的功能啦
09/30 02:07, 36F

09/30 02:08, , 37F
不然 linux 可以用 popen 去開一個 sh
09/30 02:08, 37F

09/30 02:08, , 38F
然後指令一個一個 fputs 過去
09/30 02:08, 38F

09/30 02:09, , 39F
因為你 system 裡面是字串呀 字串在 exe 裡面是明碼的 -.-
09/30 02:09, 39F

09/30 02:13, , 40F
試試看這個 http://ppt.cc/-C~v
09/30 02:13, 40F

09/30 02:15, , 41F
win32 似乎也有 _popen http://ppt.cc/jYB4
09/30 02:15, 41F

09/30 02:16, , 42F
popen for windows 好像有希望!! 又要研究pipe了...
09/30 02:16, 42F

09/30 02:19, , 43F
謝謝 假如之後測試成功的話 我在PO上來 好累先睡覺= =
09/30 02:19, 43F

10/01 00:34, , 44F
之前有寫過一個算總和的
10/01 00:34, 44F

10/01 00:34, , 45F
system("cmd/v:on/c\"echo off&set sum=0&\
10/01 00:34, 45F

10/01 00:35, , 46F
(for /l %i in (1,1,10) do (set/a sum=!sum!+%i)>nul)
10/01 00:35, 46F

10/01 00:36, , 47F
&echo SCRIPT=!sum!\""); 跟上面同一行
10/01 00:36, 47F

10/01 00:39, , 48F
對exe加上shell可以解決字串明碼的問題
10/01 00:39, 48F
文章代碼(AID): #1CetGq86 (C_and_CPP)
文章代碼(AID): #1CetGq86 (C_and_CPP)