- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
...
var
fileName :string; // имя файла
mes :string; // текст мессаги
capt :string; // заголовок мессаги
f :thandle;
fils :integer;
BytesRead :D WORD;
c :byte;
begin
writeln('enter filename:'); // просим ввести имя файла
readln(fileName); // в fileName заносим имя файла
if not fileexists(fileName) then // если он несуществует
begin
writeln('file not found :( '); // виводит предупреждение
readln;
exit; // закриваем прогу
end;
writeln(''); // просим ввесли текст мессаги
writeln('enter message text (max 10):'); // максмальна длина 10 символов(так как в Project1.exe для нее зарезирвировано 10 байт) потому что длина HelloWorld=10
readln(mes);
writeln(''); // просим ввести заголовок мессаги
writeln('enter message caption (max 10):'); // опять максимальная длина 10 символов
readln(capt);
f:=fileopen(fileName,fmOpenReadWrite); // откриваем fileName
fils:=Windows.GetFileSize(f,nil); // получаем размер
writeln('size = '+inttostr(fils)+'b'); // виводим размер
// патчим байти для мессаги
// $2848,$2849,$284A,$284B,$284C,$284D,$284E,$284F,$2850,$2851
c:=ord(char(pchar(mes[1]))); // патчим первий байт
SetFilePointer(f, $2848, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(mes[2]))); // патчим второй (2) байт
SetFilePointer(f, $2849, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(mes[3]))); // патчим 3 байт
SetFilePointer(f, $284A, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(mes[4]))); // патчим 4 байт;
SetFilePointer(f, $284B, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(mes[5]))); // патчим 5 байт
SetFilePointer(f, $284C, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(mes[6]))); // патчим 6 байт
SetFilePointer(f, $284D, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(mes[7]))); // патчим 7 байт
SetFilePointer(f, $284E, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(mes[8]))); // патчим 8 байт
SetFilePointer(f, $284F, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(mes[9]))); // патчим 9 байт
SetFilePointer(f, $2850, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(mes[10]))); // патчим 10 байт
SetFilePointer(f, $2851, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
// патчим байти для заголовка мессаги
// адреса с $283C до $2845
c:=ord(char(pchar(capt[1]))); // патчим первий байт
SetFilePointer(f, $283C, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(capt[2]))); // патчим второй байт
SetFilePointer(f, $283D, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(capt[3]))); // третий символ и так дальше
SetFilePointer(f, $283E, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(capt[4])));
SetFilePointer(f, $283F, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
c:=ord(char(pchar(capt[5])));
SetFilePointer(f, $2840, nil, 0);
WriteFile(f, c, SizeOf(c), BytesRead, nil);
...
Lure Of Chaos 21.07.2010 02:42 # −1
BlincAttack 21.07.2010 02:48 # 0
Lure Of Chaos 21.07.2010 02:50 # −1
BlincAttack 21.07.2010 02:52 # 0
Lure Of Chaos 21.07.2010 02:55 # −2
Lure Of Chaos 21.07.2010 02:58 # 0
можно еще попросить у гугла всемогущего, авось
BlincAttack 21.07.2010 03:00 # 0
Lure Of Chaos 21.07.2010 03:03 # 0
тогда гугел вам в помощь
Bjarne_Stroustrup 21.07.2010 04:38 # +3
вместо WriteFile использовать FileStream.Write
вместо SetFilePointer, использовать FileStream.Position
и т.д.
Bjarne_Stroustrup 21.07.2010 04:33 # +1
Delphi?
inkanus-gray 21.07.2010 06:39 # +6
inkanus-gray 21.07.2010 06:22 # +3
2. А главное — смещения в хардкоде. Если это экзешник, то при выравнивании/перепаковке его будут проблемы. Надёжнее читать заголовок PE и считать смещения относительно начала сегмента, в котором нужно патчить мессаги.
bugmenot 21.07.2010 15:31 # 0
"Project1.exe" это не экзешник а чёрти-чо, если переименования до сих пор не случилось - скорее всего автор уже не будет пользоваться не будет
inkanus-gray 21.07.2010 15:57 # +1
bugmenot 21.07.2010 15:22 # +1
* суржик к комментариях
Lure Of Chaos 21.07.2010 15:24 # 0
Bjarne_Stroustrup 21.07.2010 15:49 # 0
Stalker 21.07.2010 09:26 # +4
Lure Of Chaos 21.07.2010 09:50 # 0
bugmenot 21.07.2010 15:41 # +1
inkanus-gray 21.07.2010 16:07 # 0
inkanus-gray 21.07.2010 16:01 # 0
А потом как предложил Stalker.
Говно в неумении готовить из string asciiz.
TarasB 22.07.2010 20:25 # +1
Lure Of Chaos 22.07.2010 20:50 # 0
TarasB 22.07.2010 21:29 # 0
bugmenot 23.07.2010 07:17 # 0
Lure Of Chaos 23.07.2010 13:38 # −1
3.14159265 21.07.2010 10:03 # +7
и методы написаниясофта Денисом Поповым?
Мистер Хэнки 21.07.2010 11:05 # +3