질문하기 전에 간략히 정리부터 하자면
1. 저는 업무 자동화 프로그램을 돌리고 있습니다.
2. 자동화 대상이 되는 프로그램이 있는데, 클라이언트 프로그램이라고 지칭하겠습니다.
제 업무 자동화 프로그램은 화면의 이미지를 캡쳐해서 이미지를 읽고 특정 위치의 특정 픽셀 값 등에 따라 움직임이 달라지게 되어 있습니다.
예를 들어 화면 왼쪽이 빨강이면 거기에 마우스를 갖다 대고 클릭을 하거나, 위쪽에 파랑이면 키보드 특정 키를 누르거나, 하는 식입니다.
지금까지는 이와 같이 이미지 읽기에 기반해서 프로그램을 만들어 왔는데, 특정 클라이언트 프로그램에 이미지로는 판단하기 어려운 일이 생겼습니다.
그래서 클라이언트 프로그램의 메모리 값을 읽어서, 그 메모리 값을 기반으로 움직임을 결정해 줘야 하는 상황입니다.
이걸 이미 해결해낸 사람이 있어서 도움을 청했는데, 저한테 그 사람이 만든 프로그램의 모듈을 보내주더군요. 그 모듈을 제 프로그램에 연결해서 적용해보니 잘 작동하므로 해결 되어 있는 걸 확인 했습니다. 모듈을 뜯어봄으로써 어느 부분을 읽어야 하는지 까지는 확인했는데요, 읽어진 값이 바로 정답이 아니고 키값 2가지인데, 하나는 0~9까지의 10진수 10자리 수로 이루어져 있고 다른 하나는 0~3까지의 4진수 1자리 숫자로 이루어져 있습니다.
이 두개의 키를 그 사람이 운영하는 홈페이지에 전송하면, 홈페이지에서 답을 게재하고 그 답을 해당 모듈이 읽어오게끔 만들어놨더군요. 사실 그 모듈에서 바로 답을 찾을 수도 있지만, 자신의 노하우가 퍼질까봐, 안 알려주려고 취한 조치입니다.
일단 돈 주고 쓰고 있긴 한데.. 어차피 얼마 안 하는 돈이라 아까울 건 없지만 어느 날 이 사람이 홈페이지 닫아버리면 저는 또 이 모듈을 사용하지 못하게 될 겁니다. 그리고 사실 이번 클라이언트는 별로 중요한게 아니고, 그 사람은 쓰지 않는 다른 클라이언트가 있는데 그 사람이 자기가 안 쓰는 거니까, 그 클라이언트 프로그램에 대해서는 아무것도 만들지 않을 예정입니다. 그러니까 제가 스스로 해결 할 수 있기 위해서 이 문제를 해결하고 싶습니다. 아무튼 그래서 그 사람에게 "혹시 이 두 값이 암호화된 값이고, 해독하기 위한 암호키는 당신이 가지고 있는 것이냐" 라고 물어보니, "비공개된 암호키는 따로 없고, 그런거 없이도 풀 수 있다." 라고 하더군요. 예를 들은게 base64 인코딩입니다. 확실히 인코딩 된 값이라면 디코딩 하면 되니까, 암호키가 공개되어 있는 셈이라고 할 수도 있을 겁니다. base64인코딩은 예를 들어 설명한 것이므로, 확실히 인코딩이라고 할 수는 없고 그저 알아보면 알 수 있다는 내용만 말한 거라고 봅니다.
그래서 요점을 말씀드리자면, 0~9의 10진수로 이루어진 10자리 숫자와, 0~3까지 4진수로 이루어진 1자리 숫자, 이렇게 두개의 키값을 가지고 4 자리 숫자를 구할 방법을 알고 싶습니다. 여기서 구해야 할 4자리 숫자 역시 1~4까지의 4개의 숫자로 이루어져 있습니다. 예를 들면 키값 한가지는 302849387 이런 식이고 다른 키값 하나는 0,1,2,3 중에 하나인 거죠. 그리고 구해야 할 답 값은 1 4 3 2 이런 식입니다.
10자리 숫자와 1자리 숫자를 해당 홈페이지에 여러가지 넣어가며 추론해봤지만 현재까진 알 수 없었습니다. 각종 인코딩 규칙도 구글로 찾아봤지만 그럴듯하게 맞아 떨어지는 것도 없었고요. 구해야 할 값 1~4는, 16진수 숫자라고 가정하고 4로 나누어가면서도 해보려고 했지만 애초에 그 16진수 숫자값을 구하는 공식조차 알 수 없었습니다.
모쪼록 답을 찾는데 도움이 될 만한 조언 부탁드립니다.
해당 동작 수만큼의 조건을 역으로 산출해보시거나
서버에 전송되는값 캡쳐해서 분석하거나
임의의 값을 서버에 전송해서 결과값을 분석하면 될거같네요
근데 돈받는 메크로모듈이라면 다른사람들이 해당모듈못쓰게 해당값이 맞는지 확인하는 CRC 코드정도는 들어가있을거같고
UNIQUE ID 와 IP 는 기록으로 다 남겨둘거같아서 ..... 밴당하기 쉬울거같습니다.
어떤 업무 프로그램이 화면의 이미지를 읽어서 마우스/키보드 조작을 요구하나요?
일반적으로 사무 프로그램이라고 하면 그래픽이 많이 들어가지 않기 때문에 이미지 인식은 쉽습니다.
그리고 자동화가 필요한 부분이 있으면 해당 프로그램 회사에 문의해보시면 될거 같네요.
글 마지막 부분 내용에 답변을 드리자면, 해당 방식은 일반적으로 널리 사용되는 인코딩 방식은 아닙니다.
그렇다면 클라이언트 제작자가 "직접 만든" 방식이겠죠. 이미 해결한 사람은 리버스엔지니어링을 해서 분석했을 것으로 보이고요.
11자리 블랙박스(input과 ouput만 알고 중간과정은 모름)를 분석하려면 샘플 몇개 가지고는 어림도 없습니다.
어떤 클라이언트 프로그램인지는 모르겠으나, 해당 약관에 원하시는 방식의 자동화가 문제가 되지 않는다면
클라이언트 제작 회사에 문의하시는게 가장 정확할 듯 합니다.
샘플은 사실 원하면 더 많이 추출해올 수 있는데
말씀 듣고 보니 여러 샘플을 대입함으로써 중간 공식을 알아낼 수 있다는 얘기를 옛날에 얼핏 들은거 같네요
이거 관련해서 제가 조사해볼 수 있는 키워드가 있으면 몇가지 부탁드립니다.
말씀하신 대로 그 사람은 리버스엔지니어링으로 다 뜯어보고 알아낸겁니다
그런데 게임이라면 프로그래머가 그게 가능하게 설계했을까요? 아마 작정하고 복잡하게 만들었겠죠.
제가 봤을때는 프로그래머가 멍청하지 않는 이상, 게임이 없어지기 전에 샘플로 때려 맞추는건 불가능합니다.
제가 봐도 데이터셋 늘려서 학습 시킨다고 될 일은 아니고, 이미 알려진 공식이 있다고 하니 그걸 알아내야 할거 같아서.. 혹시 짐작가는 바가 있으신 형님 계실 수도 있어서 올려본 겁니다.
감사합니다.