Скрипт
Народ, помогите создать скриптик, который будет Сдавать рег файл с таким содержанием
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 сойдет.
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 раз
Пример: 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
Another guy on them internets
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Уважайте команду CSMania.RU - задавайте вопросы правильно!
$t@t!c_V()1D
Забыл сказать..Нужно чтобы менялось случайное значение, не фиксированное.
Забыл сказать..Нужно чтобы менялось случайное значение, не фиксированное.
- $t@t!c_V()1D
- Разработчик
- Сообщения: 2639
- Зарегистрирован: 06.12.2007
- Благодарил (а): 10 раз
- Поблагодарили: 29 раз
угу, то есть, должен меняться случайный байт, не фиксированный, как при использовании первого ключа.
- $t@t!c_V()1D
- Разработчик
- Сообщения: 2639
- Зарегистрирован: 06.12.2007
- Благодарил (а): 10 раз
- Поблагодарили: 29 раз
Пример: 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
Another guy on them internets
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Thanx!
Добавлено спустя 1 час 1 минуту 58 секунд:
$t@t!c_V()1D
Я уже задолбал наверное, но теперь мне нужно чтобы случайным было все - и изменяемый байт, и двухзначное число подставляется вместо него..%) Просто не продумал все сразу, вот так и получилось.=]
Добавлено спустя 1 час 1 минуту 58 секунд:
$t@t!c_V()1D
Я уже задолбал наверное, но теперь мне нужно чтобы случайным было все - и изменяемый байт, и двухзначное число подставляется вместо него..%) Просто не продумал все сразу, вот так и получилось.=]
- $t@t!c_V()1D
- Разработчик
- Сообщения: 2639
- Зарегистрирован: 06.12.2007
- Благодарил (а): 10 раз
- Поблагодарили: 29 раз
Так, сейчас попробую...
Добавлено спустя 1 час 22 минуты 59 секунд: Просто запусти её =) и возле себя она создаст key.reg
Изменяет рандомный байт в последовательности на рандомное hex-значение от 00 до FF (255).
И да, может, и можно было примерно то же самое на VBS написать, но...на NSIS мне легче "изъясняться" .
Добавлено спустя 1 час 22 минуты 59 секунд: Просто запусти её =) и возле себя она создаст 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
Another guy on them internets
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Уважайте команду CSMania.RU - задавайте вопросы правильно!
$t@t!c_V()1D
Спасибо, все работает.
Спасибо, все работает.
- $t@t!c_V()1D
- Разработчик
- Сообщения: 2639
- Зарегистрирован: 06.12.2007
- Благодарил (а): 10 раз
- Поблагодарили: 29 раз
Исправленная версия (с b1 в конце)
И да, чтобы проще, можно взять только
и Секцию
Добавлено спустя 7 минут 57 секунд:
И ещё тебе понадобится плагин nsRandom для успешной компиляции комманды
Полный код исходника
Код: Выделить всё
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
Another guy on them internets
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Уважайте команду CSMania.RU - задавайте вопросы правильно!