LongLong Опубликовано 3 августа, 2016 Поделиться Опубликовано 3 августа, 2016 Скрытый текст // IDEA by Postal2 aka K773 // CREATOR by HoShiMin // LOUNGER by [cube] library ZipFileBypass; uses Windows, System.SysUtils, Classes, JNI in 'JNI\JNI.pas', JNIUtils in 'JNI\JNIUtils.pas', CodepageAPI in 'HoShiMin''s API\CodepageAPI.pas', HWID in 'HoShiMin''s API\HWID.pas', StringsAPI in 'HoShiMin''s API\StringsAPI.pas'; {$SETPEFLAGS $0002 or $0004 or $0008 or $0010 or $0020 or $0200 or $0400 or $0800 or $1000} {$WEAKLINKRTTI ON} {$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])} {$R *.res} const JNI_VERSION_1_6 = $00010006; // Java 6, Java 7 JNI_VERSION_1_8 = $00010008; // Java 8 JNI_VERSION_1_9 = $00010009; // Java 9 // На будущее //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH function EndsWith ( Input, Suffix: string): Boolean; var Buffer: string; begin Buffer := Copy(Input, Length(Input)-Length(Suffix), Length(Suffix)); Result := Buffer = Suffix; end; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function JStringToString(JNIEnv: PJNIEnv; JavaString: JString; UTF8Encode: Boolean = True): string; var CharredString: PAnsiChar; EncodedFileName: TStringStream; DecodedFileName: TBytes; begin CharredString := JNIEnv^.GetStringUTFChars(JNIEnv, JavaString, nil); Result := AnsiToWide(CharredString); JNIEnv^.ReleaseStringUTFChars(JNIEnv, JavaString, CharredString); if UTF8Encode then begin EncodedFileName := TStringStream.Create(Result); DecodedFileName := EncodedFileName.Encoding.Convert( EncodedFileName.Encoding.UTF8, EncodedFileName.Encoding.ANSI, EncodedFileName.Bytes, 0, Length(EncodedFileName.DataString) ); EncodedFileName.Clear; EncodedFileName.WriteData(DecodedFileName, Length(DecodedFileName)); SetLength(DecodedFileName, 0); Result := EncodedFileName.DataString; end; end; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function StringToJString(JNIEnv: PJNIEnv; const Text: string): JString; var AnsiText: AnsiString; begin AnsiText := WideToAnsi(Text); Result := JNIEnv^.NewStringUTF(JNIEnv, PAnsiChar(AnsiText)); end; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function OpenHookProc(JNIEnv: PJNIEnv; JavaClass: JClass; Name: JString; Mode: JInt; LastModified: JLong; UseMMap: JBoolean): JLong; stdcall; type TZipFile_Open = function(JNIEnv: PJNIEnv; JavaClass: JClass; Name: JString; Mode: JInt; LastModified: JLong; UseMMap: JBoolean): JLong; stdcall; var ZipFile_open: TZipFile_open; CheatPath: JString; begin //OutputDebugString('[HOOK] Загружаем zip.dll...'); try LoadLibrary('C:\Program Files\Java\jre1.8.0_45\bin\zip.dll'); except OutputDebugString('[HOOK] Не удалоcь загрузить zip.dll'); OutputDebugString('[HOOK] EXIT'); Result := -1; Exit; end; //OutputDebugString('[HOOK] zip.dll загружена!'); CheatPath := StringToJString(JNIEnv, 'C:/Cheats/1.6.4.jar'); OutputDebugString(PWideChar('[HOOK] Перехвачено обращение к файлу ' + PWideChar(JStringToString(JNIEnv, Name)))); if (JStringToString(JNIEnv, Name) = 'C:\emouru\playon\bin\versions\1.6.4.jar') then begin OutputDebugString('[HOOK] Обнаружено обращение к целевому файлу!'); OutputDebugString(PWideChar('[HOOK] Заменяем ' + JStringToString(JNIEnv, Name) + ' на ' + JStringToString(JNIEnv, CheatPath) + '...')); try ZipFile_open := GetProcAddress(GetModuleHandleA('zip.dll'),'_Java_java_util_zip_ZipFile_open@28'); except OutputDebugString('[HOOK] Операция закончилось со сбоем!'); OutputDebugString('[HOOK] EXIT'); Result := -1; Exit; end; OutputDebugString('********************'); OutputDebugString(''); Result := ZipFile_open(JNIEnv, JavaClass, CheatPath, Mode, LastModified, UseMMap); end else begin try ZipFile_open := GetProcAddress(GetModuleHandleA('zip.dll'),'_Java_java_util_zip_ZipFile_open@28'); except Result := -1; Exit; end; Result := ZipFile_open(JNIEnv, JavaClass, Name, Mode, LastModified, UseMMap); end; end; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function SetOpenHook(JNIEnv: PJNIEnv): Boolean; const ClassName: PAnsiChar = 'java/util/zip/ZipFile'; var Method: JNINativeMethod; OpenClass: JClass; RegisterStatus: JInt; begin Method.name := 'open'; Method.signature := '(Ljava/lang/String;IJZ)J'; Method.fnPtr := @OpenHookProc; OutputDebugString('Получаем класс ZipFile...'); try OpenClass := JNIEnv^.FindClass(JNIEnv, ClassName); except OutputDebugString('Не удалоcь получить класс ZipFile'); OutputDebugString('EXIT'); Result := false; Exit; end; OutputDebugString('Класс ZipFile получен!'); OutputDebugString('Проверяем на NIL...'); if OpenClass = nil then begin OutputDebugString('Получен NIL!'); OutputDebugString('EXIT'); Exit(False); end; OutputDebugString('Регистрация нативки...'); try RegisterStatus := JNIEnv^.RegisterNatives(JNIEnv, OpenClass, @Method, 1); except OutputDebugString('Регистрация завершена со сбоем!'); OutputDebugString('EXIT'); Exit(False); end; if RegisterStatus >= 0 then OutputDebugString('Регистрация завершена успешно!') else begin OutputDebugString('Попытка регистрации была неуспешной!'); OutputDebugString('EXIT'); Exit(False); end; Result := RegisterStatus >= 0; end; //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH procedure DllMain(dwReason: LongWord); var JVMArray: array of PJavaVM; NumberOfVMs: JSize; I: Integer; JNIEnv: PJNIEnv; GetCreatedJavaVMs: TJNI_GetCreatedJavaVMs; LogInt: PWideChar; const BufferSize = 64; begin case dwReason of DLL_PROCESS_ATTACH: begin OutputDebugString('Загрузка jvm.dll...'); try LoadLibrary('C:\Program Files\Java\jre1.8.0_45\bin\client\jvm.dll'); except OutputDebugString('Операция окончилась неудачно!'); OutputDebugString('EXIT'); Exit; end; OutputDebugString('Загрузка прошла успешно!'); OutputDebugString('Получение загруженных JVM...'); try // Получаем загруженные виртуальные машины: GetCreatedJavaVMs := GetProcAddress(GetModuleHandle('jvm.dll'), 'JNI_GetCreatedJavaVMs'); SetLength(JVMArray, BufferSize); GetCreatedJavaVMs(@JVMArray[0], BufferSize * SizeOf(PJavaVM), @NumberOfVMs); except OutputDebugString('Операция окончилась неудачно!'); OutputDebugString('EXIT'); Exit; end; LogInt := PWideChar(IntToStr(NumberOfVMs)); OutputDebugString(PWideChar('Операция прошла успешно! Загруженно ' + LogInt + ' JVM')); // Регистрируем нативную функцию распаковки архива для всех найденных JVM: if NumberOfVMs > 0 then begin OutputDebugString('Регистрируем нативную функцию распаковки архива для всех найденных JVM:'); for I := 0 to NumberOfVMs - 1 do begin LogInt := PWideChar(IntToStr(I)); OutputDebugString(PWideChar('Регистриция нативки в JVM #' + LogInt)); JVMArray[I]^.GetEnv(JVMArray[I], @JNIEnv, JNI_VERSION_1_8); JVMArray[I]^.AttachCurrentThread(JVMArray[I], @JNIEnv, Nil); SetOpenHook(JNIEnv); end; end else begin OutputDebugString('Ни одна JVM не была загружена!'); OutputDebugString('EXIT'); Exit; end; end; DLL_PROCESS_DETACH: begin OutputDebugString('UNLOAD BYPASS LIBRARY'); Exit; end; end; end; begin DllProc := @DllMain; DllProc(DLL_PROCESS_ATTACH); end. Ссылка на комментарий Поделиться на другие сайты Поделиться
saiberpro Опубликовано 3 августа, 2016 Поделиться Опубликовано 3 августа, 2016 Дай больше информации, откуда взял?, с чем связано?. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 3 августа, 2016 Поделиться Опубликовано 3 августа, 2016 Похоже на какой-то распаковщик запущенных jar файлов под виртуальной машиной Java. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 3 августа, 2016 Поделиться Опубликовано 3 августа, 2016 там еще подмена, короч какое то бредовое [CENSORED]о *facepalm Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения