Jump to content

Need help with python script


proskater123

Recommended Posts

So I found this script to decrypt a netgear cfg file. But when i try to run the script it comes up with a bunch of errors. Can someone look at the script and possibly fix the issues? I know nothing about python.

import pyDes
import os, sys

# Encryption key is a slightly variation of "NtgrBak"
KEY = [0x56-8, 0x74, 0x67, 0x72, 0x42, 0x61, 0x6b, 0x00]

def derive_des_key(ascii_key):
def extract_by_offset(offset):
byte_index = offset >> 3
bit_index = byte_index << 3

v0 = (ascii_key[byte_index] << 8) | ascii_key[byte_index+1]
v1 = 8 - (offset - bit_index)
v0 >>= v1
return v0 & 0xfe

k = ""
for i in range(0, 7*8, 7):
k += chr(extract_by_offset(i))
return k

def decrypt_block(block, key_bytes):
k = derive_des_key(key_bytes)
des = pyDes.des(k, pyDes.ECB)
r = des.decrypt(block)
return r

def main():
data = sys.stdin.read()
assert (len(data) % 8) == 0

current_key = KEY[:]

r = ""
for i in range(0, len(data), 8):
current_key[0] += 8
if current_key[0] > 0xff:
current_key[0] = current_key[0] - 0x100
current_key[1] += 1

block = data[i:i+8]
d = decrypt_block(block, current_key)

r += d

sys.stdout.write(r)
Link to comment
Share on other sites

I took out the <cut> and </cut> cause I do beileve that they are not needed. Then when I run the script in windows

C:/python puthonscript.py

File "pythonscript.py", Line 8

Def extract_by_offset(offset):

/\

IndentationError: expected an indent block

Link to comment
Share on other sites

It also helps if you put the script in code brackets, but based off that error, it seems you have an indenting issue. Python uses indents to break out functions, and other languages like C use {}. But python only uses indents so you have to watch your spacing. (I am not well versed in Python, but I know a little bit)

Link to comment
Share on other sites

Also, doesn't the top of the script need to be defined? Like bash shell scripts?


#!/usr/local/bin/python
# change above line to point to local 
# python executable
or


#!/usr/bin/env python

import pyDes
import os, sys

## Encryption key is a slightly variation of "NtgrBak"
KEY = [0x56-8, 0x74, 0x67, 0x72, 0x42, 0x61, 0x6b, 0x00]

def derive_des_key(ascii_key):
def extract_by_offset(offset):
byte_index = offset >> 3
bit_index = byte_index << 3

v0 = (ascii_key[byte_index] << 8) | ascii_key[byte_index+1]
v1 = 8 - (offset - bit_index)
v0 >>= v1
return v0 & 0xfe

k = ""
for i in range(0, 7*8, 7):
k += chr(extract_by_offset(i))
return k

def decrypt_block(block, key_bytes):
k = derive_des_key(key_bytes)
des = pyDes.des(k, pyDes.ECB)
r = des.decrypt(block)
return r

def main():
data = sys.stdin.read()
assert (len(data) % 8) == 0

current_key = KEY[:]

r = ""
for i in range(0, len(data), 8):
current_key[0] += 8
if current_key[0] > 0xff:
current_key[0] = current_key[0] - 0x100
current_key[1] += 1

block = data[i:i+8]
d = decrypt_block(block, current_key)

r += d

sys.stdout.write(r)
### Leave two empty lines at end of script, not sure of required by Python like other shell scripts or not, don't quote me on that


edit: just noticed you said windows, so above for linux, not going to work, but even still wouldn't you need cygwin or something like that and still have to define the python path, or does that not apply under windows? Edited by digip
Link to comment
Share on other sites

So this is what I have came up with so far.

#!/usr/bin/env python
import pyDes
import os, sys

# Encryption key is a slightly variation of "NtgrBak"
KEY = [0x56-8, 0x74, 0x67, 0x72, 0x42, 0x61, 0x6b, 0x00]

def derive_des_key(ascii_key):
def extract_by_offset(offset):
byte_index = offset >> 3
bit_index = byte_index << 3

v0 = (ascii_key[byte_index] << 8) | ascii_key[byte_index+1]
v1 = 8 - (offset - bit_index)
v0 >>= v11
return v0 & 0xfe

k = ""
for i in range(0, 7*8, 7):
k += chr(extract_by_offset(i))
return k

def decrypt_block(block, key_bytes):
k = derive_des_key(key_bytes)
des = pyDes.des(k, pyDes.ECB)
r = des.decrypt(block)
return r

def main():
data = sys.stdin.read()
assert (len(data) % 8) == 0

current_key = KEY[:]

r = ""
for i in range(0, len(data), 8):
current_key[0] += 8
if current_key[0] > 0xff:
current_key[0] = current_key[0] - 0x100
current_key[1] += 1

block = data[i:i+8]
d = decrypt_block(block, current_key)

r += d

sys.stdout.write®

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...