예전에 쓰던 <div><span style="font-size:9pt;line-height:1.5;">암호화 관련된걸 해제하는 프로그램이 있는데요.</span></div> <div><br></div> <div><br></div> <div><br></div> <div><div>암호화 공식은 모르고 그거에 의존해서 쓰다가 ㄷㄷ</div></div> <div>파일형태가 좀 바껴서 못쓰게됐어요..</div> <div><br></div> <div>그래서 그냥 만들어야겠다 라고 생각해서 만들고있는데요.</div> <div><br></div> <div>암호화 분석하다가 빡쳐서 예전에 있던 프로그램을 뜯어서 만들어보려고 </div> <div><br></div> <div><br></div> <div>RecStudio라는 걸로 디컴파일을 했습니다.</div> <div>IDA, Bumerang 의 경우 제가 잘못한건지.. 32bit프로그램이라 그런지 에러가 나더군요 ㄷㄷ</div> <div><br></div> <div><br></div> <div><br></div> <div>어쨋던 디컴파일을 했는데.</div> <div><br></div> <div>java만 하고, C에 익숙하지않아서 그런지 전혀 이해가 안되는 것들이 보이더라고요 ㄷㄷ;</div> <div><br></div> <div>민폐가 안된다며 알고싶어서 여쭙습니다!</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div>1. 함수 호출</div> <div><div><br></div> <div>//-- 메인 쓰레드 내용 中</div> <div>_push( &_v552);</div> <div>_push("Is %s encrypted file?");</div> <div>_push(260);</div> <div>_push( &_v292);</div> <div>L00403620( &_v552, __eflags);</div></div> <div><br></div> <div><br></div> <div><div>// 해당 함수</div> <div>L00403620 (</div> <div> _unknown_ __ecx, // r2</div> <div> _unknown_ __eflags, // r9</div> <div> signed char* _a4, // _cfa_4</div> <div> intOrPtr _a8, // _cfa_8</div> <div> intOrPtr _a12, // _cfa_c</div> <div> char _a16 // _cfa_10</div> <div>)</div></div> <div><br></div> <div><br></div> <div>컴파일러가 이상한건지 리턴타입이 안적혀있더라고요.</div> <div><br></div> <div>그런데, 기본적으로 함수 인자는 6개인데, </div> <div>_push()라는 함수로 인자를 넣고, 함수 기본 인자를 따로 넣는 식으로 돼 있는데,</div> <div><br></div> <div>이건 디컴파일러가 이상한건가요?</div> <div>아니면 저런 함수가 원래 C에서 사용하는 함수인건가요?</div> <div><br></div> <div>사실 정확한 사용용도를 알고싶어서요.</div> <div><br></div> <div>어셈블리어 push처럼 사용하는것 같기도한데,.. 잘 이해가 안가더라고요.</div> <div><br></div> <div><br></div> <div><br></div> <div>그리고 _uknown_ 이라는 데이터타입은 디컴파일러가 만들어낸 구조체인가요? 아니면 보통 저렇게 쓰기도 하나요?</div> <div>디컴파일 된 내용에도 start 가 있긴하지만, 인자를 어떤걸 받아오는지 모르겠어서 해당 내용이 어떤흐름으로 가는지 감이 안잡히네요...</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div>2. 포인터?????</div> <div><br></div> <div>디컴파일된 내용중에 일부에</div> <div><br></div> <div>ShowWindow( *4271308, 5);</div> <div><br></div> <div>이런식으로 숫자에 포인터(*)를 사용한 경우가 보이는데요.</div> <div>이경우에 0*숫자 라는 계산처리가 되나요? 아니면 4271308이라는 메모리 위치의 데이터를 포인터로 가지고오계되나요??</div> <div>java유저라 이런 경우가 전혀 이해가 안되서요. 이렇게 단도직입적으로 메모리를 취하기도 하나요? (이건 컴파일러가 저렇게 조작한거같긴하지만..)</div> <div><br></div> <div><br></div> <div><br></div> <div>포인터는 언제나 햇갈리는데요..</div> <div><br></div> <div>int a = &value; // a는 주소값만</div> <div>int b = *a; // b는 실제 값의 복제</div> <div><br></div> <div>이렇게 알고있고,</div> <div>a += 1; //배열이 1증가</div> <div><br></div> <div><br></div> <div>이런식으로 알고있습니다.</div> <div>그리고 함수에서 인자로 받을때도 ( int &value) 이런식? 으로 받는걸로알고있는데.</div> <div><br></div> <div>FUNC( unsigned int _unkown1 ){</div> <div><br></div> <div> //중랼</div> <div><br></div> <div> _unkown1 += 2;</div> <div><br></div> <div> //중략</div> <div><br></div> <div> *(_unkown1) 어찌고저찌고</div> <div><br></div> <div>}</div> <div><br></div> <div><br></div> <div><br></div> <div>?! 초반까지만 해도 그냥 int로 생각하고 있던 녀석이 어느순간 포인터에 쌓여져서 쓰기 시작한것입니다.</div> <div><br></div> <div>이런 경우도 있나요? 선언은 unsigned int인데... 어떻게.. 갑자기 포인터로 ㄷㄷ</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div>역시 C의 세계는 너무 복잡한 것 같습니다... ㅠㅠ</div> <div><br></div> <div>디컴파일을 해서 그런지 goto 문이 눈을 현혹함 ㄷㄷ.;</div> <div><br></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.