안녕하세요 형님들.
본격적으로 날씨가 추워졌습니다 건강 관리 유의하십시오.
저는 요즘 업무 자동화 프로그램을 만들어서 사용료를 받고 있습니다. 그런데 모 업체에서 저의 사무자동화 프로그램을 바이러스 등으로 규정하고 자기네 프로그램과 경합하게 만들어 놨습니다.
처음에는 저 자신은 제 프로그램이 바이러스가 아님을 알고 있고, 사용자의 컴퓨터에 그 어떤 해도 끼치지 않을 것이므로 그러한 경합으로부터 제 프로그램이 이기게 할 방법을 찾아가면서 싸워 왔는데 프로그램 만드는 것 보다 그 경합에 쓰는 시간이 더 많아지더군요. 자료 찾고 뭐하고 하는 것도 하루 이틀이고 너무 힘듭니다.
주변의 다른 선배 제작자들에게 물어보니 우선순위를 두고 싸울게 아니고 애초에 프로그램이 검출되지 않게 하면 더 이상 싸울 일이 없고 그게 가장 깔끔한 방법이라고 하더군요. 구체적인 방법을 물어봤는데 "개별 컴파일 하라"는 조언만 해줄 뿐 구체적인 방법은 알려주지 않더군요. 이 바닥 특성 상 서로 경쟁 상대이기 때문에 간단한 조언만 해줄 뿐 구체적인 방법은 서로 숨깁니다. 결국 스스로 방법을 찾아야 하는데요
개별 컴파일이라는 건 결국 이런 겁니다. 하나의 컴퓨터에서 단 하나의 프로그램만 돌아간다면 해당 업체에서 이 사람이 손으로 업무를 보는 건지 자동화 프로그램을 사용하는 건지 알 수 없습니다. 수십 대의 컴퓨터에서 같은 프로그램이 돌아가기 때문에 프로그램 간의 공통점을 통해서 프로그램이 검출된다는 겁니다. 그러니까 소스 코드를 컴파일 하고, 컴파일된 exe파일을 복사해서 쓰지 말고 컴파일 할 때마다 프로그램의 내부 구성 등 뭔가 정보가 다르게 끔 컴파일 하라는 건데요
그래서 이 부분에 대해 구글링 및 조사를 좀 해봤는데, 네임 스페이스를 바꾸는 것과 guid를 각각 다르게 하는 정도 외에는 유의미한 것을 찾지 못 했습니다.
특히 guid같은 경우엔 굳이 컴파일 할 때가 아니더라도, 실행 될 때마다 다르게 해 줄 수 있어서 개별 컴파일하라는 얘기와는 거리가 멀은 것 같았고.. 네임 스페이스의 경우에는 제 프로그램은 파이썬으로 제작 되었는데, 네임스페이스는 결국 __main__입니다. 그런데 __main__은 제 프로그램 뿐 아니라 파이썬으로 제작된 모든 프로그램이 별도로 개발자가 손대지 않으면 일반적으로 __main__으로 되어 있을 텐데 말이죠.
그리고 또 하나 말씀 드리고 싶은 것은, 제 프로그램을 쓰는 사람들 중 컴파일 하지 않고 vscode 에서 바로 실행하는 식으로 사용한 사람(저 포함)들은 검출이 되지 않은 반면, exe파일로 사용해온 사람들(제가 소스코드를 보여줄 수 없는 사람들입니다)은 검출이 된 것으로 보입니다. 물론 이 부분은 표본이 너무 적어서 vscode와 exe파일 간의 차이라고 확신은 할 수 없고, 그럴 수도 있다고 생각할 만한 정황이 있습니다. 조언 해 주실 때 혹시 도움이 될 수 있을것 같아서 말씀 드렸습니다.
구글링하다하다 안되고 생각 하다하다 안되서 여기다 질문 올려봅니다. 혹시 짐작가시는 방법이나 좋은 힌트 있으신 형님 계시면 부탁 드립니다.
̸̼ py Ͻ pyo pycθ ϼŵ κ ذ˴ϴ.
̼ Ư ãƺð Ͻø ˴ϴ.
ü α ϴ ȭ ̽.. themida ϴ ƴ ε
Ȥ themida븸 մϱ? ٸ ߰ ִ ġ ְڽϱ?
մϴ
namespace, package, module, submodule, path, class, function δ Ȯ ǹ̸ ϴ.
c ̳ʸ free function main 1 ؾ ϰ װ entry point ˴ϴ. main namespace ȿ Ҽ ϴ.
main 縦 ̷ ǵҼ .
ؿ ֽ ذå namespace ϸ ٸ ϴ غ ִ ġ ̴ϴ.
Ͻ ش ȸ翡 α hash ˻Ѵٸ α ؼ( ̷ ణ hash ʽϴ) ٸ α νϰ ϶ ǹ ϴ.
python 尡 Ǵ ؽð ϴٸ α ̵ ϰ ־ ϸ մϴ.
α ϴ hash ƴ ʶ ̶ ̺ ư..
غôµ, cmdâ fcɾ ̳ʸ غ ִ.
Aڵ带 , ϵ Bexe ϰ Bexe ̳ʸ غýϴ.
翬 100% ġ߰
Aڵ带 ѹ ؼ Cexe Bexeϰ Cexe ̳ʸ غôµ
ġ߽ϴ.
ؽð̶ Ͻôϱ Ȯ ̶̰ ־ ٸ ָ ּ ؽð ְڴ ϴ.
ȿ ̰ ְ ݾ ٸ غڽϴ.
ǰ մϴ
α 켱 ǰԲ ؾ ϰ, ڵ鵵 α 켱 DZ մϴ.
ϰ ֽϴ.
ۿ ũγİ ٴ ־µ װ ι ƴ ڽϴٸ,
ǻ ؼ ø ̱ οϰ ʰ,
Բ DZ ִٴ κ մϴٸ, DZ DZ մϴ.
ظ ϰ ظ 䱸ϰ, ظ ϰ ڰ ̴,
츮 ȸ ֽϴ.
1. 밳 DZ Ǵ ڴ ظ ǹ ϴ.
2. ظ 䱸ϴ ڰ ѹ 䱸, ϴ ظϴ 忡 õԴϴ.
3. ظ 䱸, DZ ε س ̸ ظϴ 忡 , ļ ظؾ մϴ.
4. ظ 䱸ϴ ڽ ϴ ٸ ظ ϴ ƹ͵ ϴ.
5. ظ 䱸 մϴ.
̿ ظ ʿ 쿡 ʿϴٰ Ǵ ѵ 쿡 Ƿ Ѵٴ ̶ մϴ. ϸ ׳ Ѿµ ε Ʈ̹Ƿ ϴ. Ͻ Ƿʴ ˰ ϰ óϰڽϴ. մϴ.
2. Ϲ α ٸ α, Ư α ϴ. ġ MS Word MathType ʴ ó .
3. ' ', ' ٴ Ư ' ̷ ǵ, ո ǽ Դϴ.
4. α̶ ȸǰ ƴ϶ ȭƮƮ û߾ մϴ. ۻ翡 ̳ʸ ñ״ĸ ϰ ó ؾ. õ ̽ϴ.
5. ± , ̹ Ͻ ϴ. ǥ ƴ ְ? Ȯ ƺ̱ մϴٸ.
2cpu ۼϽô Դϴ. е ' ٴ' ٸ 亯 Ͻ.
ǹ ǥϴ Դϴ. Ϸ 亯 ٴ Ŵٸ, ϰ Ȯ ַ մϴ.
ȯԲ "" ȣϴٰ ̴µ
̴ ٽ ڸ α̰, ڴٴ ٶ 鼭,
δ ڽ ˰ ٸ ִٴ ̴ϴ.
ϱ?
ʴ ڰ ̴. ϴٸ ظ ϶ 䱸 ߸ ֽϴ.
1. ȯ̰, ̴ ȯ Դϴ. ˰ ʰڽϴ. ˰ ʹٴ ٶ ȯ Դϴ.
2. ظ åӰ ̿ ش ˴ϴ. , ȯ ѸԸ 䱸ϼ ȯ ̳ ؾ ʴ±. ҿǴ ð δؾ ̰.
ܿ ϰ , ̰ ⼭ ̹Ƿ 䱸Ͻ 帮ڽϴ.
α ħ ǻ Ѹ, ڰ ص α ְ ۾ϴ â ϴ ġ ٵδ ƿƼԴϴ. ⼭ ϴ α α ϳ̰.
䱸 ƴϱ ϴ Ƚϴ.
' α', ' ٴ' ڽ ǽ ȭ ϸ ϴ Ƿ ƴմϱ? ϴ ε.
װ Ź ֽ 亯 մϴ.
ڵ ȭ. themida ̹ Ŵٸ Ͻǰ ڽϴ.
2. ǥ: ̳ʸ ؽ ٸ ϰ ʹ.
ü ̳ʸ ؽ : ũƮ ó compile time txt ϴ ũƮ ְ, Ŀ ߰ϴ մϴ. ü ̳ʸ ؽ ̰ɷ ٲϴ.
Ʈ ؽ : compile time ־ մϴ. ó compile time ִ ̸ ɰ̴ϴ. Ź ϰԵǼ մϴ.
3. ǥ: ̳ʸ ٸ ϰ ʹ.
.
õ带 ึ 翬 ٲٽñ.
ü ̳ʸ ٲٱ , in/out ˰ ߿ ϰ ϴ մϴ. ˰ پ ֽϴ.
ϰ in/out ٸ Ϻη Ƽ ص ó ٲϴ.
4. ǥ: ̳ʸ ü ϰʹ.
vm ϴ.
5. ǥ: α α ǰ ϰ ʹ.
library/binary/event handling precedence
Ͻô, spy++ ø ̺Ʈ ڵ鷯 پִ ȮϽǼ ֽϴ. 翬 α ̰ Ȯ մϴ. ڵ鷯 unregister ϰ տ register Ҽ ֽϴ.
library/binary environment variable path մϴ.
6. Ÿ: dll injection, message hooking, api hooking, ߾ ϴ° ϴ. ٵ ڵȭ α ̷ Ͱ ʳ.
ٵ ȣ 亯 ȣմϴ.
6 Ǵ ̾ ϰ ʹٰ ϴ ͵ε 1~5 ãƺ鼭 غ 帮ڽϴ
亯 ȣϴٰ ϼ̴µ ״ غ ִ ܼ ũ Ǿϴ մϴ
Ȯ MS °̴ϴ.
MS ϴ ٸ α ʽϴ.
ٸ η ư ߿ ٽ ð̴ϴ.
ȮѰ MS Ͻô ̴ϴ.
ڰ ñϸ ñ ÷ ø ְ 亯ϱ ̸ 亯 ʾƵ ǰ.
ֽ Ǵ Ʈ̵ ƴұ غϴ. .
۾ ٰ ϼ̰ (https://www.2cpu.co.kr/bbs/new_view.php?bo_table=QnA&wr_id=687285)
ǻ ؼ ް ; øٰ ϴµ
ø .. ũ ʿ ϴ ŷ ۿ ̳
ڿ ¥ ְ ô±.
ƴϰ, Ұ ƴϱ Դϴ. ϴ ߸Ǿٴ Դϴ.
QnA ۼϽ о, 簡 Īϴ ȣϴٴ ֽϴ. ƶ о .. ũγ ۾̰ų ϴ. ̷ ǵ ٴ ?
׳ ӻ ӻ, ̸ , Ȯ ϼ. װ Դϴ.
̸ ̴µ, ô..
ø 䱸Ͻô´ Ͻô ص帮ڽϴ.
Ʋȴٰ ǰų, ¾Ҵٴ° ᱹ ظ ˴ϴ
ȯ åž մϴ.
¾Ҵٰ ǽ 츦 , Դ ؿ å ֽ ֽð å ü ۼּ
Ͻô 䱸 غ ص帱 ִ°Ŷ ص帮ڽϴ
ȯ ҼӵǾ ִٰų ƴ ϴ. Ϲ ù ̴µ, ȯԲ ø ǵ ü 迡 ϰ ؾ Ѵٸ װŭ Ұ ͵ 幰? 2cpu ȰϽø鼭 ƴ϶ ø ȯԿ ҹ ǵ ִ Ȯ ްԲ 䱸ּ
ȯԿ Ȯ ƾ ϰ ׳ Ѿ װž Ұ ̴ϴ.
ǽ̾ ̶ ǽ ִ װ. ø ִ ۵ ǽɸ Ϸ ֽϴ.