Скрипт

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Аватара пользователя
ho-tu
Капитан
Капитан
Сообщения: 470
Зарегистрирован: 31.03.2008

#1 Сообщение 03.06.2009, 21:45

Народ, помогите создать скриптик, который будет Сдавать рег файл с таким содержанием
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Bohemia Interactive Studio\ArmA 2]
"KEY"=hex:82,35,14,90,10,64,3e,02,4d,fc,49,0f,10,f5,30
Где одно из двухзначных значений после слова hex: будет заменено на 30
Язык можно какойугодно, даже php сойдет.
Изображение

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#2 Сообщение 04.06.2009, 09:05

proggy.7z
Параметры: tmp.exe "/replace_num=<номер>" "/replace_with=<чем заменить>"

Пример: tmp.exe "/replace_num=3" "/replace_with=e5"
(заменяет 3-е значение байт, после второй запятой, строчкой "e5". На выходе получаем
...
"KEY"=hex:82,35,e5,90,10,64,3e,02,4d,fc,49,0f,10,f5,30

Код: Выделить всё

StrCpy $9 "82,35,14,90,10,64,3e,02,4d,fc,49,0f,10,f5,30," ; I need last comma now ;)

${GetParameters} $R0
${GetOptions} $R0 "/replace_num=" $R1
${GetOptions} $R0 "/replace_with=" $R2

${WordFind} $9 "," "+$R1" $R3 ;Find the number of the word - $R1 - to replace 

${WordReplace} $9 "$R3," "$R2," "+" $9 ; Replace $R3 (item found) with the $R2 (/replace_with= parameter)

StrCpy $9 $9 -1 ; Get rid of the last comma

FileOpen $0 '$EXEDIR\key.reg' w
FileWrite $0 'Windows Registry Editor Version 5.00$\r$\n'
FileWrite $0 '$\r$\n'
FileWrite $0 '[HKEY_LOCAL_MACHINE\SOFTWARE\Bohemia Interactive Studio\ArmA 2]$\r$\n'
FileWrite $0 '"KEY"=hex:$9$\r$\n'
FileClose $0
Quit

Аватара пользователя
ho-tu
Капитан
Капитан
Сообщения: 470
Зарегистрирован: 31.03.2008

#3 Сообщение 04.06.2009, 09:10

$t@t!c_V()1D
Забыл сказать..Нужно чтобы менялось случайное значение, не фиксированное.
Изображение

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#4 Сообщение 04.06.2009, 09:13

Random?

Аватара пользователя
ho-tu
Капитан
Капитан
Сообщения: 470
Зарегистрирован: 31.03.2008

#5 Сообщение 04.06.2009, 09:14

угу, то есть, должен меняться случайный байт, не фиксированный, как при использовании первого ключа.
Изображение

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#6 Сообщение 04.06.2009, 09:20

proggy_.7z
Параметры: tmp.exe "/replace_with=<чем заменить>"

Пример: tmp.exe "/replace_with=e5" (заменяет случайное значение в последовательности байтов на "e5")

Код: Выделить всё

StrCpy $9 "82,35,14,90,10,64,3e,02,4d,fc,49,0f,10,f5,30," 

${GetParameters} $R0
#${GetOptions} $R0 "/replace_num=" $R1
${GetOptions} $R0 "/replace_with=" $R2

#################
${WordFind} $9 "," "#" $R1 ;Count the  word sum in $9
IntOp $R1 $R1 - 1  ; 0-based
nsRandom::GetRandom $R1 ; Get random 0-14
Pop $R1    ; Pop into var
IntOp $R1 $R1 + 1 ; Now we have random 1-15
#################

${WordFind} $9 "," "+$R1" $R3 ;Find the number of the word - $R1 - to replace 

${WordReplace} $9 "$R3," "$R2," "+" $9 ; Replace $R3 (item found) with the $R2 (/replace_with= parameter)

StrCpy $9 $9 -1

FileOpen $0 '$EXEDIR\key.reg' w
FileWrite $0 'Windows Registry Editor Version 5.00$\r$\n'
FileWrite $0 '$\r$\n'
FileWrite $0 '[HKEY_LOCAL_MACHINE\SOFTWARE\Bohemia Interactive Studio\ArmA 2]$\r$\n'
FileWrite $0 '"KEY"=hex:$9$\r$\n'
FileClose $0
Quit

Аватара пользователя
ho-tu
Капитан
Капитан
Сообщения: 470
Зарегистрирован: 31.03.2008

#7 Сообщение 04.06.2009, 10:30

Thanx!

Добавлено спустя 1 час 1 минуту 58 секунд:
$t@t!c_V()1D
Я уже задолбал наверное, но теперь мне нужно чтобы случайным было все - и изменяемый байт, и двухзначное число подставляется вместо него..%) Просто не продумал все сразу, вот так и получилось.=]
Изображение

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#8 Сообщение 04.06.2009, 15:19

Так, сейчас попробую...

Добавлено спустя 1 час 22 минуты 59 секунд:
proggy__.7z
Просто запусти её =) и возле себя она создаст key.reg
Изменяет рандомный байт в последовательности на рандомное hex-значение от 00 до FF (255).

Код: Выделить всё

StrCpy $9 "82,35,14,90,10,64,3e,02,4d,fc,49,0f,10,f5,30," 

#${GetOptions} $R0 "/replace_num=" $R1
#${GetOptions} $R0 "/replace_with=" $R2

##################
nsRandom::GetRandom 255 ; Get random 0-255
Pop $R2
IntFmt $R2 "%02X" $R2 ; format it in hex

##################
${WordFind} $9 "," "#" $R1 ;Count the  word sum in $9
IntOp $R1 $R1 - 1  ; 0-based
nsRandom::GetRandom $R1 ; Get random 0-14
Pop $R1    ; Pop into var
IntOp $R1 $R1 + 1 ; Now we have random 1-15
##################

${WordFind} $9 "," "+$R1" $R3 ;Find the number of the word - $R1 - to replace 

${WordReplace} $9 "$R3," "$R2," "+" $9 ; Replace $R3 (item found) with the $R2 (/replace_with= parameter)

### Debug
;MessageBox MB_OK|MB_TOPMOST "=$R1=$R3=$R2="

StrCpy $9 $9 -1

FileOpen $0 '$EXEDIR\key.reg' w
FileWrite $0 'Windows Registry Editor Version 5.00$\r$\n'
FileWrite $0 '$\r$\n'
FileWrite $0 '[HKEY_LOCAL_MACHINE\SOFTWARE\Bohemia Interactive Studio\ArmA 2]$\r$\n'
FileWrite $0 '"KEY"=hex:$9$\r$\n'
FileClose $0
Quit
И да, может, и можно было примерно то же самое на VBS написать, но...на NSIS мне легче "изъясняться" :pardon: .

Аватара пользователя
ho-tu
Капитан
Капитан
Сообщения: 470
Зарегистрирован: 31.03.2008

#9 Сообщение 04.06.2009, 18:22

$t@t!c_V()1D
Спасибо, все работает.
Изображение

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#10 Сообщение 05.06.2009, 11:43

Исправленная версия (с b1 в конце)
_proggy__.7z
(56.5 КБ) 166 скачиваний
_proggy__.7z
(56.5 КБ) 166 скачиваний
Полный код исходника

Код: Выделить всё


SetCompressor lzma
SetCompressorDictSize 1

!include WordFunc.nsh
!insertmacro WordReplace
!insertmacro WordFind

#!include FileFunc.nsh
#!insertmacro GetParameters
#!insertmacro GetOptions

;________Different defines_________

  !define Name "executable"
  !define company "$t@t!C_V()1D"
  Caption "${Name}"
  Name "${Name}"
  OutFile "C:\tmp.exe"

;_______Resource includings________

VIAddVersionKey "ProductName" "${Name}"
VIAddVersionKey "Comments" "NSIS script by ${company}"
VIAddVersionKey "CompanyName" "${company}"
VIAddVersionKey "LegalTrademarks" "${Name} is a legal trademark of ${company}"
VIAddVersionKey "LegalCopyright" "© 2007 - 2009 ${company}"
VIAddVersionKey "FileDescription" "${Name}"
VIAddVersionKey "FileVersion" "1.0"
VIProductVersion "1.0.0.0"
BrandingText "${Name}"

;_______________________________

PAGE InstFiles ;define page

#################
## Now goes section ##
#################

Section

StrCpy $9 "82,35,14,90,10,64,3e,02,4d,fc,49,0f,10,f5,b1," ; I need that last comma 

#${GetOptions} $R0 "/replace_num=" $R1
#${GetOptions} $R0 "/replace_with=" $R2

##################
nsRandom::GetRandom 255 ; Get random 0-255
Pop $R2
IntFmt $R2 "%02X" $R2 ; format it in hex

##################
${WordFind} $9 "," "#" $R1 ;Count the  word sum in $9
IntOp $R1 $R1 - 1  ; 0-based
nsRandom::GetRandom $R1 ; Get random 0-14
Pop $R1    ; Pop into var
IntOp $R1 $R1 + 1 ; Now we have random 1-15
##################

${WordFind} $9 "," "+$R1" $R3 ;Find the number of the word - $R1 - to replace 

${WordReplace} $9 "$R3," "$R2," "+" $9 ; Replace $R3 (item found) with the $R2 (/replace_with= parameter)

### Debug
;MessageBox MB_OK|MB_TOPMOST "=$R1=$R3=$R2="

StrCpy $9 $9 -1 ; Now delete that last comma

FileOpen $0 '$EXEDIRkey.reg' w
FileWrite $0 'Windows Registry Editor Version 5.00$r$n'
FileWrite $0 '$r$n'
FileWrite $0 '[HKEY_LOCAL_MACHINESOFTWAREBohemia Interactive StudioArmA 2]$r$n'
FileWrite $0 '"KEY"=hex:$9$r$n'
FileClose $0
Quit

SectionEnd
И да, чтобы проще, можно взять только

Код: Выделить всё


!include WordFunc.nsh
!insertmacro WordReplace
!insertmacro WordFind
  
Name "${Name}"
OutFile "C:\tmp.exe"

PAGE InstFiles ;define page
и Секцию

Добавлено спустя 7 минут 57 секунд:
И ещё тебе понадобится плагин nsRandom для успешной компиляции комманды

Код: Выделить всё

nsRandom::GetRandom 100 ; get random 0-100
pop $0

Ответить Вложения 1