QT를 처음 사용하고 암호화 된 기능을 만들려고합니다. 는 당신이 C/C++로 할 수 있습니다 전체 :런타임에 암호 해독 기능을 사용하고 QT C++
- 하는
- 함수 페이지는 rwx에게
- 암호화을 작동하려면 포인터를 가지고 그것 (I 암호화와 같은 프로그램에 해독 예를 들어)
- 암호를 해독하고
C의 간단한 코드는 다음과 같이 거의 일어날 실행
,321 0QT에서 이러한 예제를 실행하려고하면 런타임 오류가 발생합니다.
void TestFunction()
{
QMessageBox::information(0, "Test", "msgbox test encrypted func");
}
void FunctionStub() { return; }
void XorBlock(DWORD dwStartAddress, DWORD dwSize)
{
char * addr = (char *)dwStartAddress;
for (int i = 0; i< dwSize; i++)
{
addr[i] ^= 0xff; // here i get seg. fault
}
}
DWORD GetFuncSize(DWORD* Function, DWORD* StubFunction)
{
DWORD dwFunctionSize = 0, dwOldProtect;
DWORD *fnA = NULL, *fnB = NULL;
fnA = (DWORD *)Function;
fnB = (DWORD *)StubFunction;
dwFunctionSize = (fnB - fnA);
VirtualProtect(fnA, dwFunctionSize, PAGE_EXECUTE_READWRITE, &dwOldProtect); // Need to modify our privileges to the memory
QMessageBox::information(0, "Test", "change func to read write execute ");
return dwFunctionSize;
}
void check_enc_function()
{
DWORD dwFuncSize = GetFuncSize((DWORD*)&TestFunction, (DWORD*)&FunctionStub);
QMessageBox::information(0, "Test", "use func");
TestFunction();
XorBlock((DWORD)&TestFunction, dwFuncSize); // XOR encrypt the function -> @@@ i get seg fault in here @@@
QMessageBox::information(0, "Test", "after enc");
TestFunction(); // If you try to run the encrypted function you will get Access Violation Exception.
XorBlock((DWORD)&TestFunction, dwFuncSize); // XOR decrypt the function
QMessageBox::information(0, "Test", "after dec");
TestFunction(); // Fine here
getchar();
}
왜 이런 일이 있어야 : 여기
은 QT의 코드인가? QT는 표준 C++처럼 정밀도처럼 동작해야합니다 ...
post Scriptum.
흥미롭게도 중요한 기능을 암호화 된 상태로 유지하는 가장 합법적 인 방법은 무엇입니까 (암호화되는 이유는 DRM입니까?).
합법적으로 나는 안티 바이러스가 나를 방어하기 때문에 실수로 나를 바이러스로 표시하지 않는다는 것을 의미합니다.
PS2
나는 말, 나는 클라이언트가 서버에서 실행하는 데 필요한 기능을 요청하고 서버가 경우에 전송하는 서버 클라이언트 스키마를 구축 할 것입니다 (네트워크를 통해 암호화 기능을 전달하는 경우 승인 됨) 어떻게 함수가 붕괴되지 않도록 기호를 정렬 할 수 있습니까?
PS3 QT에서 나는 DEP와 ASLR 방어 해제 할 수있는 방법
?