어셈블러, C++ 및 PE 파일 작동 방식에 대해 더 배우는 방법으로 exe packer/protector를 코딩하려고합니다. 나는 현재 EP를 포함하고있는 섹션이 키와 XOR되고, 새로운 섹션이 나의 암호 해독 코드를 포함하도록 생성되도록하고있다. 해독 후 원본 EP에 JMP를 시도 할 때를 제외하고 모든 것이 훌륭합니다.절대 주소 (연산 코드)에 대한 JMP
DWORD originalEntryPoint = optionalHeader->AddressOfEntryPoint;
// -- snip -- //
crypted.put(0xE9);
crypted.write((char*)&orginalEntryPoint, sizeof(DWORD));
을하지만 대신 엔트리 포인트로 점프의, 올리 디버그이 코드가 분해 있음을 보여줍니다 : 기본적으로
나는 이렇게
00404030 .-E9 00100000 JMP 00405035 ; should be 00401000 =[
내가하려고 할 때 수동으로 변경하기 olly 새로운 opcode가
00404030 -E9 CBCFFFFF JMP crypted.00401000
으로 표시됩니다. 0xCBCFFFFF는 어디에서 왔습니까? C++ 측에서 어떻게 생성할까요?
E9의 대체품은 무엇입니까? –
@Chris : 검색시 도움이 될 수 있습니다. http://ref.x86asm.net/ – fvu
점프는 대개 상대적입니다. 절대 far 주소로 점프하기위한 opcode 'EA'와 간접 주소로 점프하기위한 opcode (피연산자가 점프 할 주소를 포함하는 메모리 위치를 지정하는 곳)가 있습니다. – ChrisW