Language : AutoHotkey

Author : 예지력

Feature : Spawn child process using pipe


DynaScript.zip


블로그 방명록에 어떤 분이 흥미로운 댓글을 남겨주셔서 만들어보았습니다



Quasi Thread 라고 부를수도 있을라나?

코드를 현재 스레드의 자식(Child) 프로세스로 메모리에서 실행시킵니다




'프로그래밍 > Archive' 카테고리의 다른 글

Dock - attach a window to another  (1) 2017.04.23
DynaScript - Child 프로세스로 코드 실행  (27) 2015.12.14
[Lib] Class Msgbox  (6) 2015.11.27
[Lib] CleanNotify  (4) 2015.11.21
WinWaitCreated()  (0) 2015.10.17
MS Office Style Gui 프로토타입  (3) 2015.10.09
  1. 열쇠 2015.12.14 18:27 신고

    예지1에
    #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
    ; #Warn ; Enable warnings to assist with detecting common errors.
    SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
    SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.

    이 문구만 있는데 따로 수정을 해야 되나요?
    간단한 예제좀 부탁드립니다.

    • BlogIcon 예지력 2015.12.14 18:41 신고

      아 파일을 잘못 올렸었어요! ㅋㅋ
      지금 수정했습니다, 다시 받아보세요
      예제1, 2 둘다 확인해보시면 될거에요
      서브 프로세스로 오토핫키가 2개가 실행되는걸 확인하실 수 있을거에요

    • 열쇠 2015.12.14 19:29 신고

      넵 어쩌다가 디컴파일 얘기로 빠졌는데..
      예지력님께서 말씀하신것도 enigma 다른 플러그인 세팅으로 메모리를 지울수가 있어서 괜찮을듯 싶습니다.

  2. 열쇠 2015.12.14 18:43 신고

    안녕하세요. 다소 난해할수 있는 질문 하나 드립니다.
    http://www.2shared.com/file/dHtQEZ62/w_online.html
    //
    #Persistent
    #SingleInstance Force
    ptr := A_PtrSize ? "ptr" : "uint"
    len := DllCall("enigma_ide.dll\EP_ProtectedStringByID", "int", 1, ptr, 0, "int", 0)
    if (len > 0)
    {
    VarSetCapacity(str, len*2, 0)
    len := DllCall("enigma_ide.dll\EP_ProtectedStringByID", "int", 1, "str", str, "int", len)
    if (len > 0)
    PW = %str%
    }
    msgbox, 괄호안에 문구는 Enigma의 변수 스트링 입니다. `n(%pw%)
    //
    해당 스크립트로 컴파일 후 enigma라는 프로그램을 이용해 pw라는 변수에 msgbox,okay를 보관하도록 하였습니다.
    이때 예지력님께서 올려주신 스크립트를 통해 변수pw의 본래 스크립트는 msgbox,okay를 실행하려면 어떻게 해야 되나요?

    • BlogIcon 예지력 2015.12.14 18:51 신고

      예제까지 적었는데 확인해보시죠!?
      제가 코드를 다 만들어드리지는 않습니다

      정말 도움을 받고 싶으시면, 저 스크립트가 뭐 하는 건지부터 설명을 해주시는 게 먼저 할 일 같습니다
      ProtectedStringByID 리턴값이 뭔가요?

    • 열쇠 2015.12.14 18:56 신고

      해당 스크립트는
      enigma protect라는 프로그램을 이용해 Protected Strings에 보관해놓은 글자를 호출하는 스크립트 입니다.
      해외에서는 오토핫키의 소스 유출을 방지하고자 ahk에 본래 스크립트를 적용하지 않고 enigma protect의 Protected strings에 본래 스크립트를 변수로 저장해 저런식으로 따로 변수를 호출해서 실행하는 방법을 사용하고 있습니다. 근데 영문 포럼인지라 쉽게 따라할수가 없어 여기에 질문을 남겨두었습니다. ProtectedSTringById는 Protected Strings를 사용하려면 Enigma protector에서 플러그인을 체크 해야되는데 아마 해당 플러그인을 콜하는 부분인것 같습니다.

    • 열쇠 2015.12.14 18:59 신고

      포럼 주소는
      https://autohotkey.com/board/topic/82590-code-protection/page-2
      입니다.

    • BlogIcon 예지력 2015.12.14 19:15 신고

      근데 디컴파일러로 바로 보이는데요?
      마지막 Uberi 포스트 확인해보세요

    • 열쇠 2015.12.14 19:21 신고

      디컴파일을 통해서 해당 오토핫키의 스크립트는 찾을수 있으나
      enigma에 저장해놓은 변수 스크립트는 찾을수 없습니다.
      중요한건 Enigma의 변수 스크립트인지라..

    • BlogIcon 예지력 2015.12.14 19:26 신고

      아뇨 str으로 받아오고 그걸 DynaScript의 어규민트로 날려야하는데
      그러면 메인 스래드의 메모리에 str이 보여요!
      @_@

    • 열쇠 2015.12.14 19:30 신고

      네 그것도 맞습니다.
      다만 enigma의 다른 플러그인으로 예지력님께서 말씀하신걸 방지가 가능한지라.. 어쩌다가 보안쪽 얘기로 빠져버렸네요;;

    • BlogIcon 예지력 2015.12.14 19:37 신고

      읽어보니 해시가 풀리면 len이 0이상으로 나온다는거 같고, 리턴값이 str으로 나오네요. 그러면 처음에 enigma에 key 값에 스크립트 적어두고 리턴 str을 DynaScript로 보내시면 될 거 같아요. 근데 이러면 서브 프로세스를 메인함수처럼 실행시킨다는건데 이러면 AutoHotkey.exe 통해 가는거라 보안상태가 없는데 @_@...enigma 로 뭐를 막으시겠다는건가요? 서브프로세스는 패킹이 안되있는건데

    • 열쇠 2015.12.14 19:44 신고

      아 autohotkey.exe를 경유해서 실행이 되는 거였네요..

    • BlogIcon 예지력 2015.12.14 19:48 신고

      오토핫키는 다 AutoHotkey.exe를 통해서 가요, 인터프리터, 스크립트 언어니까요.
      컴파일하는것은 ahk파일과 exe파일을 wrapping하는거고요, 그래서 엄밀히 말하면 컴파일이 아니죠
      그러니까 소스코드보안에 신경쓰는게 의미가 없게 되는거죠,
      패킹해봤자 메모리에 로드되면 AutoHotkey.exe 머신에서 실행되는거라 코드가 메모리에 로드되어있습니다. 디컴파일은 프로그램을 로딩하고 하는거에요. 그냥 디컴파일러로 프로그램 드래그드롭하는게 아니고요.
      오토핫키 개발자 fincs도 오토핫키의 소스코드는 절대로 보호되지 않고, 소스코드 보안글도 포럼에서 그만좀 올리라고 했습니다ㅋㅋ 아무런 의미가 없으니

      무슨 패커을 사용해도 보안에는 의미가 없어요, 올리디버거, Sylldbg로 브레이크포인트 걸면 메모리에서 코드가 다 보이는데 패킹해봤자죠

    • 열쇠 2015.12.14 19:57 신고

      정말 안타까운 사실이네요.
      그래도 이런식으로 외부 프로그램을 이용하면 메모리를 지울수도 있습니다.
      http://www.2shared.com/file/gU44Uy-k/test.html
      간단한 역분석 방지와 메모리를 커널에서 호출해서 지우도록 해보았습니다.

    • 열쇠 2015.12.14 20:01 신고

      외담입니다만 fincs는 왜이렇게 극단적으로 오픈웨어를 지향하는걸까요?
      정책에 반해서라도 따로 컴파일러를 만들어 주었으면 좋겠습니다. 아마 수많은 오토핫키 스크립터들이 바라는 사항이 아닐까 싶네요

    • BlogIcon 예지력 2015.12.14 20:26 신고

      오토핫키 시작 자체가 가장 엄격한 오픈소스를 지향하는 GNU라이선스였고, 오토핫키 베이직(B) 버전의 출발도 형제 언어인 오토잇이 오픈소스라서 가능했고요. 현재의 오토핫키(L) 가 아직까지 개발되는 이유도 6년 전에 개발이 중단됐던 오토핫키 베이직(B)이 오픈소스여서 가능한 거니까요.

      외국에는 이미 국내보다 오픈소스 정신과 오리지널 코드의 제작자를 크레딧을 해주는 문화가 발달해서 그런지, 오토핫키 정책에 불만이 사람 별로 못 본 것 같습니다, 저 자체도 오픈소스의 수혜를 많이 받으며 공부해와서 그런지 별 생각 없고요.
      다만, 몇몇 도둑(?)들 때문에 소스 보호에 신경을 쓰게 될 때가 있다는 점이 안타까워요

    • 열쇠 2015.12.14 20:49 신고

      그렇군요..오토잇처럼 최소 Obfuscation 기능이라도 있으면 좋겠지만..말씀 잘들었습니다.

  3. 박세준 2015.12.21 08:26 신고

    예전부터 생각해왔던건데 진짜로 하시는 분들이 있네요..ㅋㅋ
    오핫 스크립트 에디터같은 프로그램 만들 때 유용할 것 같습니다.
    저는 ahk2exe 컴파일러를 FileInstall로 내장시켜서 FileAppend -> ahk2exe -> run 을 생각하고 있었는데 차원이 다른 작품이 나와버렸네요~

  4. 왕진 2015.12.22 22:57 신고

    예지력님글도보고 구글사이트에 다른분의 오토핫키 강좌도 보고 해서 이미지서치를 해보는중입니다.
    실례가안된다면 몇가지 질문을 드리고싶습니다.

    Gui, ADD, Text, x30 y5 w110 h20, 매크로 프로그램
    Gui, ADD, Text, x60 y25 w50 h20 vA, 준비!!!
    Gui, ADD, Text, x60 y50 w50 h20 vB, 0회
    Gui, ADD, Button, x20 y80 w110 h20, 시작
    Gui, ADD, Button, x20 y110 w110 h20, 종료
    Gui, Show

    return

    Button시작:
    {
    CoordMode, Relative
    Gui,Submit,nohide
    GuiControl,,A, 시작

    매크로시작 := true
    클리어횟수 := 0
    Loop
    {

    ImageSearch, FoundX, FoundY, 0,0, A_Screenwidth, A_ScreenHeight, *50 %A_ScriptDir%\Image\1.png
    if(Errorlevel = 0)
    {
    send {click &FoundX& %FoundY%}
    sleep, 3000
    }
    ImageSearch, FoundX, FoundY, 0,0, A_Screenwidth, A_ScreenHeight, *50 %A_ScriptDir%\Image\2.png
    if(Errorlevel = 0)
    {
    send {click &FoundX& %FoundY%}
    sleep, 3000
    }
    ImageSearch, FoundX, FoundY, 0,0, A_Screenwidth, A_ScreenHeight, *50 %A_ScriptDir%\Image\3.png
    if(Errorlevel = 0)
    {
    send {click &FoundX& %FoundY%}
    sleep, 3000
    클리어횟수 := 클리어횟수 + 1
    Gui,Submit,nohide
    GuiControl,,B, %클리어횟수% 회
    }
    if(매크로시작 = false)
    {
    break
    }
    }
    }
    return

    Button종료:
    {
    매크로시작 := false
    ExitApp
    }
    return

    제가 이미지서치를 하려고 만든것인데..
    이미지를 못찾는건지..어떤지..다른건다되는데 이미지서치만 안됩니다...
    예지력님강좌에있는것처럼 vx,vy 좌표로해서도해보고 foundx,foundy로도해봤는데..
    도통..이미지를 못찾는것 같아요..

    질문1. 코드에 문제가 있는건가요..?
    질문2. 코드에 문제가 없다면 혹..이미지를캡쳐하는 부분에서 잘못된것일까요?
    ->캡쳐는 그림판으로해서 png,bmp파일로 했으며 캡처는 가장알아보기쉬운 부분적으로하였습니다.어느글에서보니 가장자리?하는게좋다고하여그렇게도해보고 정가운데로도 해봤지만..여전히 움직이질않네요..
    질문3. 제가 노트북을쓰는데..지금2모니터를 사용합니다. HDMI로 하나 RGV로 하나 오토핫키는 HDMI쪽 모니터를 주로 설정하여
    그곳에서하는데 혹 듀얼모니터사용하는게 문제가 될수 있을까요?
    질문4. 파일경로쪽에%A_scriptdir%\Image\1.bmp or png 이렇게 사용하는데
    파일은 바탕화면 ppp 폴더안에 스크립트가 있으며 하위폴더인 Image 폴더안에 찾고자하는 파일3개와 그파일로 캡쳐뜬 사진3개가
    있습니다 이럴때 코드 경로는 저위에 코드가 맞는건가요?

    질문이 많습니다ㅠㅠ도와주세요!!

    • 2016.01.10 22:53 신고

      너무 기초적인 내용인데 포스팅과는 맞지않는거 같네요
      킴영감님 포스팅보고 따라하신거같은데 foundx변수에
      &가 아닌 %를 주셔야합니다.

  5. 구리 2016.01.01 01:57 신고

    안녕하세요^^
    독립 프로세스로 명령을 시켰더니 잘 되는 명령어도 있고 잘 안되는 명령어도 있네요.ㅜㅜ
    msgbox,send 같은 명령은 잘 실행되는데
    Run Notepad.exe
    Winclose
    이런 명령들은 (Run 같은경우 파일을 찾을 수 없다고 나옵니다.)
    (Winclose는 반응이 없습니다.)
    잘 실행되지 않네요.ㅜㅜ

    어떻게 해야 위와 같은 명령도 잘 실행되게 할 수 있을지 모르겠습니다.
    알려주시면 정말 감사하겠습니다.

    새해 복 많이 받으세요!

    • BlogIcon 예지력 2016.01.01 18:44 신고

      저는 잘 되는데요? :(

      Code := "
      (Join`n
      Run, Notepad.exe
      )"

      Init := new DynaScript(Code)
      Init.Run()
      Return

      #Include, <DynaScript>

  6. 구리 2016.01.03 14:55 신고

    왠진 모르지만 run 이후 공백(`n)을 살려놨더니 잘 되네요.^^;;

    덕분에 좋은 스크립트도 써보고 감사합니다.!

  7. BlogIcon 비필 2016.02.15 15:51 신고

    이거 AutoHotkey_H 나 AutoHotkey.dll 로도 해결 가능합니다. 서로 변수공유도 가능하고요

  8. BlogIcon 1466005116 2016.06.16 00:38 신고

    알찬 정보 좋네요~

  9. 2016.09.16 20:11

    비밀댓글입니다

+ Recent posts