Уведомления

Группа в Telegram: @pythonsu

#1 Июль 8, 2014 17:37:49

avsv3
Зарегистрирован: 2014-07-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Деобфускация скрипта закодированного с помощью base64+lambda+re.sub

Помогите разобраться со скриптом, точнее с деобфускацией. Байс64 легкоЮ а дальше путаюсь в лямбдах.

exec 'import re;import base64'
exec (lambda p, y: (lambda o, b, f: re.sub(o, b, f))('([0-9a-f]+)', lambda m: p(m, y), base64.b64decode('ZSAxCmUgNiAsIDdiCmUgMmQKZSA4ZgplIDc2CmUgYTgKMzYgNWUgLiBjMSBlIDkyICwgMjIgLCAxYwozNiBjNSBlIDRkCjM2IDg0IGUgOTEKMzYgODMgZSAxZiAsIDNkCjM2IDZmIGUgYzkKMzYgYTggZSBkMSAsIDliICwgY2EgLCBhOSAsIGEwICwgYzcgLCBhNSAsIDhiICwgY2YKMzYgMmUgZSBiMQozNiAyZSBlIGMwCjM2IDZhIGUgNGUgLCA0MwpkMCA2NCAtIDY0OiBkOAo1NCA9IDFmIC8gMTAKZDAgODEgLSA4MTogMmMgKyAzZSAlIGJjICUgMzcgLSBkNgo2NSBhZSA6CglkMAk2NgktCTY2Ogk0YgkqCTE3CSoJZAoJNGYJPQkxZgoJMjUJPQkwLmQ3CgkyYQk9CTAuZDcKCWQwCTI3CS0JMjc6CTE4CS8JNWIJLQliNwkuCTMwCgkzMwk5MwkoCWQ1CSwJYwkpCToKCQlkNQkuCWJmCT0JOGYJLglhNAkoCSkKCQlkNQkuCWMJPQljCgkJZDUJLgk1Zgk9CTYJLgk3OQkoCSkKCQlkNQkuCWYJPQkxYgoJCWQwCTlkCTU3CSgJZDUJLgljCSwJMmQJLgkyZAkpCToKCQkJNGQJKAknNjUJPQknCSwJZDUJLgljCS4JODcJLgk4YQkpCgkJCWEzCTg2CSgJJ2MJYzMJYmUJYQkyZAlhZCcJKQoJCQlkMAk3MwktCTczOgkxMwkvCTFhCgkzMwk0MAkoCWQ1CSkJOgoJCWI4CT0JN2IJLgk2ZAkoCWQ1CS4JYwkuCTYyCSkKCQlkMAk0NwktCTQ3OgkxZQklCTMJKwk4CSsJMTkJLQk3CgkJMWQJPQk2CS4JNWQJKAkpCgkJNjAJPQkxZAkuCTQxCgkJY2MJPQkxZAkuCWM0CgkJYTcJPQkxZAkuCWM4CgkJZDAJNTYJLQk1NjoJMWEJLQkzNwoJCWQwCWI4CTYzCTFiCToKCQkJNGQJKAknYjAJYWYnCSkKCQkJZDkKCQlkMAlkNQkuCWYJNjMJMWIJOgoJCQkzYQk9CWI4CgkJN2EJOgoJCQkzYQk9CWQ1CS4JZgoJCWQ1CS4JZgk9CWI4CgkJZDAJNzgJLQk3ODoJMWEJLwlkCS0JMmMJLgk4CgkJMzkJPQkoCTFkCS4JNTIJKAkpCS0JZDUJLgljCS4JNjIJKQkuCTllCgkJMzQJPQlhNwkuCThjCVsJJ2EyJwldCgkJODkJPQlhNwkuCThjCVsJJzk5JwldCgkJNTEJPQkzNAkqCTM0CS8JODkKCQlkMAkzOQk8PQk1MQk6CgkJCTdmCT0JYTgJLgk4YgkoCSgJMzkJKgk4OQkpCS8JKAkzNAkqCTM0CSkJKQkqCTAuNQoJCTdhCToKCQkJN2YJPQkwLmM2CgkJNWEJPQlhOAkuCTliCSgJN2YJKQkqCTM0CS8JKAk4OQkqCWQ3CSkKCQlkMAk5NAktCTk0Ogk3CgkJODIJPQkoCWI4CS4JY2IJLQkzYQkuCWNiCSkJLwk1NAoJCWMyCT0JKAliOAkuCTljCS0JM2EJLgk5YwkpCS8JNTQKCQk1NQk9CSgJYjgJLgljZQktCTNhCS4JY2UJKQkvCTU0CgkJZDAJMzEJLQkzMToJZDYJKwlkCS4JMTkKCQk1Ywk9CWI4CS4JY2IJKwk4MgkqCTVhCgkJNmMJPQliOAkuCTljCSsJYzIJKgk1YQoJCTUwCT0JYjgJLgljZQkrCTU1CSoJNWEKCQlkMAkyMAktCTIwOgkzNwkrCWQ4CS0JMWUJJQlkCS4JYmMKCQkyMQk9CTdiCS4JNmQJKAk1YwksCTZjCSwJNTAJKQoJCWQwCTkwCS0JOTA6CWQ2CSsJMzAJLwk1YgklCWQ2CS0JMmMKCQlkMAkyOQktCTI5Ogk1YgkvCTNlCgkJZDAJMjQJLQkyNDoJMmMJJQk1YgkrCTM3CSsJMTkJKwliNwoJCTIxCS4JOWMJKz0JZDUJLgljCS4JNDQJLgk5YQlbCSc3NycJXQkuCTljCSsJZDUJLgljCS4JNDQJLglhNglbCSc2NycJXQlbCTAJXQkuCTljCgkJZDAJNzAJLQk3MDoJMTcJJQkxNwkuCTgJJQlkCSoJNWIJJQkzMAoJCWQwCTIzCS0JMjM6CWQ4CSsJNGIKCQlkMAk2OAktCTY4OgkxOAkuCTMwCS4JZDgKCQk2MAkuCTJiCSgJMjEJKQoJCWQzCT0JZDUJLgk0OAkoCSkKCQlkMAlkMwk2MwkxYgk6CgkJCWQ5CgkJZDUJLgk1Zgk9CTYJLgk3OQkoCSkKCQk2MAkuCTQ5CSgJMjEJLAlkMwkpCgkJNjAJLgkzYgkoCSkKCQlkMAkxNAktCTE0OgkxNwkuCTRiCS8JMWUKCQlkMAkzOAktCTM4OglkNgklCWQ4CS4JNwktCTEzCSsJMWUKCTMzCTQ4CSgJZDUJKQk6CgkJZDMJPQk2CS4JNzkJKAkpCS0JZDUJLgk1ZgoJCWQwCWQzCTwJZDUJLgkyNQk6CgkJCWQ5CTFiCgkJN2EJOgoJCQlkMAlkMwk+CWQ1CS4JMmEJOgoJCQkJZDMJPQlkNQkuCTJhCgkJCWQ5CWQzCgkJCWQwCTY2CS0JNjY6CWJjCSoJYmMJLgkxMwkuCTM3CS0JMTMKCTMzCTdlCSgJZDUJKQk6CgkJNDYJPQk2CS4JYwkoCSkKCQlkOQk1NwkoCTQ2CSwJMmQJLgkyZAkpCTRjCTQ2CS4JYmYJIT0JZDUJLgljCS4JYmYKCQlkMAk5NgktCTk2OgkyYwklCTMwCSUJM2UKCTMzCWJkCSgJZDUJKQk6CgkJZDkJZDUJLgliZgoJCWQwCTc4CS0JNzg6CTNlCS0JMWUJKglkCSsJNWIJKwkzCSsJMwoJCWQwCTExCS0JMTE6CTMJLQlkCSUJNwklCTMJLwkxOAktCWQKCQlkMAk3NAktCTc0OgkzCSoJMmMKNjUJOWYJOgoJYjUJPQkxYgoJZDAJODAJLQk4MDoJMWEJKglkOAkvCTE5CglACWIzCgkzMwk3ZAkoCWI1CSkJOgoJCTlmCS4JYmIJKAkpCgkJOWYJLgliNQk9CWI1CgkJMWQJPQk2CS4JNWQJKAkpCgkJMWQJLgkzMgkuCWI5CSgJJzZiJwkpCgkJMWQJLgk0MQkuCTU5CT0JYTEKCQk5ZgkuCTQwCSgJYjUJLgliZAkoCSkJKQoJCWQwCTkJLQk5OgkxZQkrCTMwCSUJMWUJKwkzNwkuCTEzCgkJZDAJMzEJLQkzMToJNWIJKwkxYQkrCTFhCS8JZDYKCUAJYjMKCTMzCWJiCSgJKQk6CgkJZDAJOWYJLgliNQk2MwkxYgk6CgkJCWQ5CgkJMWQJPQk2CS4JNWQJKAkpCgkJOWYJLgliNQk9CTFiCgkJMWQJLgk0MQkuCTU5CT0JYmEKCQkxZAkuCTMyCS4JYjkJKAknN2MnCSkKCQlkMAkyNgktCTI2OgliYwoJQAliMwoJMzMJNDIJKAkpCToKCQlkOQk5ZgkuCWI1CTYzCTlkCTFiCgkJZDAJMTIJLQkxMjoJYmMJJQkxOAkvCTcJJQk1YgoJQAliMwoJMzMJNDAJKAliZgkpCToKCQlkMAk5ZgkuCTQyCSgJKQk0Ywk5ZgkuCWI1CS4JYmQJKAkpCT09CWJmCToKCQkJOWYJLgliNQkuCTQwCSgJKQoJCQk2CS4JOTUJKAk1NAksCTkxCSgJOWYJLgk0MAksCWJmCSkJKQoJCQlkMAkyOQktCTI5OgliYwoJCQlkMAkyMwktCTIzOgk1YgkuCWQ2CgkJCWQwCTk4CS0JOTg6CTNlCSUJMTgJKgliNwkqCTE4CgkJCWQwCTQ1CS0JNDU6CTE5CS4JMTgKMzMJYjIJKAlkNQksCWIJLAkyOAksCWFiCSwJOGUJPQkxYgkpCToKCWI0CT0JMQkuCTNmCglkMAk1MwktCTUzOgk4CSsJNGIJKgkzMAoJZDAJNjEJLQk2MToJMzcJKgkxMwkvCWJjCS4JZDgJLgkxOAoJZDAJYjQJLgkyZgkoCTEJLglhYQksCTI4CSkJNGMJYgk6CgkJNzUJPQk2CS4JYwkoCSkKCQlkMAk3NQk2MwkxYglkMgk5ZgkuCTQyCSgJKQk6CgkJCTlmCS4JYmIJKAkpCgkJCWQ5CTNjCSgJZDUJLAliCSwJMjgJLAlhYgksCThlCSkKCQk5ZgkuCTdkCSgJYWUJKAk3NQkpCSkKCQlkOQoJCWQwCTMxCS0JMzE6CWQ2CS0JMTMJLgkxOQklCTE4CS0JMmMKCWQwCWI0CS4JMmYJKAkxCS4JYjYJLAkyOAkpCTRjCWIJOgoJCTlmCS4JYmIJKAkpCglkOQkzYwkoCWQ1CSwJYgksCTI4CSwJYWIJLAk4ZQkpCglkMAk0CS0JNDoJZDYJLwk3CS4JMwozMwk0YQkoCWQ1CSwJYgksCTI4CSwJYWIJLAk4ZQk9CTFiCSkJOgoJYjQJPQkxCS4JM2YKCWQwCTM1CS0JMzU6CTgJJQk0YgoJZDAJNzAJLQk3MDoJMwkqCWI3CglkMAliNAkuCTJmCSgJMQkuCWFhCSwJMjgJKQk0YwliCToKCQk3NQk9CTYJLgljCSgJKQoJCWQwCTc1CTYzCTFiCToKCQkJOWYJLgliYgkoCSkKCQkJZDkJNjkJKAlkNQksCWIJLAkyOAksCWFiCSwJOGUJKQoJCTlmCS4JN2QJKAlhZQkoCTc1CSkJKQoJCWQ5CgkJIzg1CWNkCTk3CWI1CThkCglkMAliNAkuCTJmCSgJMQkuCWI2CSwJMjgJKQk0YwliCToKCQk5ZgkuCWJiCSgJKQoJZDkJNjkJKAlkNQksCWIJLAkyOAksCWFiCSwJOGUJKQoJZDAJNjYJLQk2NjoJYmMJKwkxZQkrCTFlCS0JMzcKMzMJNmUJKAlkNQksCWIJLAkyOAksCWFiCSwJOGUJPQkxYgkpCToKCWI0CT0JMQkuCTNmCglkMAk1NgktCTU2Ogk3CS4JMTgJKgkzCS4JMTgKCWQwCTcyCS0JNzI6CTMJLwkzNwkqCTE3CS0JMTkKCWQwCWI0CS4JMmYJKAkxCS4JYWEJLAkyOAkpCTRjCWIJOgoJCTc1CT0JNgkuCWMJKAkpCgkJZDAJNzUJNjMJMWIJOgoJCQk5ZgkuCWJiCSgJKQoJCQlkOQlhYwkoCWQ1CSwJYgksCTI4CSwJYWIJLAk4ZQkpCgkJOWYJLgk3ZAkoCWFlCSgJNzUJKQkpCgkJZDkKCQlkMAkxNQktCTE1OgliNwkrCTE4CS0JYmMJLwkxMwoJZDAJYjQJLgkyZgkoCTEJLgliNgksCTI4CSkJNGMJYgk6CgkJOWYJLgliYgkoCSkKCWQ5CWFjCSgJZDUJLAliCSwJMjgJLAlhYgksCThlCSkKCWQwCTU4CS0JNTg6CWQ4CSUJMWEKCWQwCTcxCS0JNzE6CTEzCSsJNwklCWQ4CSsJYjcJLQk4CjNjCT0JOTIJLglkNAo2OQk9CTIyCS4JZDQKYWMJPQkxYwkuCWQ0CmQwCTg4CS0JODg6CTE4CS0JZAklCTEzCjkyCS4JZDQJPQliMgoyMgkuCWQ0CT0JNGEKMWMJLglkNAk9CTZlCmQwCTE2CS0JMTY6CTRiCSoJMzAJJQk4')))(lambda a, b: b[int('0x' + a.group(1), 16)], '0|CommandMapping|02|iI1Ii11111iIi|4|5|BigWorld|iiIIIII1i1iI|ii1II11I1ii1I|9|a|isDown|target|o0OoOoOO00|import|__targetLastShotPoint|10|11|12|OOooOOo|14|15|16|iIiiiI1IiI1I1|OOOo0|oO0o0ooO0|ii11ii1ii|None|StrategicControlMode|o0oO0|oO0ooO|SERVER_TICK_LENGTH|20|Ooo00O00O0O0O|SniperControlMode|23|24|__INSUFFICIENT_TIME_DIFF|26|27|key|29|__MAX_TIME_DIFF|_VehicleGunRotator__updateShotPointOnServer|Iii1I1|Vehicle|projectile_trajectory|isFired|I1IiI|31|soundNotifications|def|OOo000|35|from|ii1I|38|OOooo0000ooo|o00oOoo|_VehicleGunRotator__updateGunMarker|OOO0OOO00oo|SHELL_TRAJECTORY_EPSILON_CLIENT|OO0O0O|g_instance|update|gunRotator|hasAutoAim|collideVehiclesAndStaticScene|typeDescriptor|45|o0o00ooo0|47|__getTimeDiff|_VehicleGunRotator__rotate|O0oo0OO0oOOOo|iIiI|and|LOG_NOTE|collideDynamicAndStatic|__ROTATION_TICK_LENGTH|I1iiiiI1iII|I11i1i11i1I|getOwnVehiclePosition|53|OO0o|O0OoOoo00o|56|isinstance|58|clientMode|OOO0O|Oo|OoOooOOOO|player|AvatarInputHandler|__time|oo00|61|position|is|64|class|66|turretPositions|68|i1II1|ProjectileMover|target_captured|i11iiII|Vector3|O0o0Ooo|ModelHitTester|70|71|72|73|74|o00O|BattleReplay|hullPosition|78|time|else|Math|target_unlocked|add|isTankMarked|Iiii|80|81|IiI1i|constants|functools|intercept|TypeError|__class__|88|O0|__name__|asin|shot|deactivation|event|uuid|90|partial|ArcadeControlMode|__init__|94|callback|96|default|98|gravity|chassis|sin|y|not|length|oOOo0oo|atan2|False|speed|raise|uuid4|fmod|hull|Oo0oO0ooo|math|atan|CMD_CM_LOCK_TARGET|mods|Oo0O0O0ooO0O|instance|ii11i|none|shotPos|computeProjectileTrajectory|oO|staticmethod|ii1i1I1i|autoaim|CMD_CM_LOCK_TARGET_OFF|Ooo00oOo00o|O00ooOO|play|True|remove|iiiii|getId|be|id|getShotAngles|control_modes|OOo0o0|must|inputHandler|debug_utils|785398163|sqrt|vehicleTypeDescriptor|segmentMayHitVehicle|cos|x|o00|the|z|tan|if|pi|or|II|handleKeyEvent|self|ooO0OO000o|2|i11iIiiIii|return'.split('|'))

Офлайн

#2 Июль 8, 2014 22:40:44

avsv3
Зарегистрирован: 2014-07-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Деобфускация скрипта закодированного с помощью base64+lambda+re.sub

практически разгадал ответ, есть

1. расшифрованная строка из base64

e 1
e 6 , 7b
e 2d
e 8f
e 76
e a8
36 5e . c1 e 92 , 22 , 1c
36 c5 e 4d
36 84 e 91
36 83 e 1f , 3d
36 6f e c9
36 a8 e d1 , 9b , ca , a9 , a0 , c7 , a5 , 8b , cf
36 2e e b1
36 2e e c0
36 6a e 4e , 43
d0 64 - 64: d8
54 = 1f / 10
d0 81 - 81: 2c + 3e % bc % 37 - d6
65 ae :
d0 66 - 66: 4b * 17 * d
4f = 1f
25 = 0.d7
2a = 0.d7
d0 27 - 27: 18 / 5b - b7 . 30
33 93 ( d5 , c ) :
d5 . bf = 8f . a4 ( )
d5 . c = c
d5 . 5f = 6 . 79 ( )
d5 . f = 1b
d0 9d 57 ( d5 . c , 2d . 2d ) :
4d ( ‘65 = ’ , d5 . c . 87 . 8a )
a3 86 ( ‘c c3 be a 2d ad’ )
d0 73 - 73: 13 / 1a
33 40 ( d5 ) :
b8 = 7b . 6d ( d5 . c . 62 )
d0 47 - 47: 1e % 3 + 8 + 19 - 7
1d = 6 . 5d ( )
60 = 1d . 41
cc = 1d . c4
a7 = 1d . c8
d0 56 - 56: 1a - 37
d0 b8 63 1b :
4d ( ‘b0 af’ )
d9
d0 d5 . f 63 1b :
3a = b8
7a :
3a = d5 . f
d5 . f = b8
d0 78 - 78: 1a / d - 2c . 8
39 = ( 1d . 52 ( ) - d5 . c . 62 ) . 9e
34 = a7 . 8c
89 = a7 . 8c
51 = 34 * 34 / 89
d0 39 <= 51 :
7f = a8 . 8b ( ( 39 * 89 ) / ( 34 * 34 ) ) * 0.5
7a :
7f = 0.c6
5a = a8 . 9b ( 7f ) * 34 / ( 89 * d7 )
d0 94 - 94: 7
82 = ( b8 . cb - 3a . cb ) / 54
c2 = ( b8 . 9c - 3a . 9c ) / 54
55 = ( b8 . ce - 3a . ce ) / 54
d0 31 - 31: d6 + d . 19
5c = b8 . cb + 82 * 5a
6c = b8 . 9c + c2 * 5a
50 = b8 . ce + 55 * 5a
d0 20 - 20: 37 + d8 - 1e % d . bc
21 = 7b . 6d ( 5c , 6c , 50 )
d0 90 - 90: d6 + 30 / 5b % d6 - 2c
d0 29 - 29: 5b / 3e
d0 24 - 24: 2c % 5b + 37 + 19 + b7
21 . 9c += d5 . c . 44 . 9a . 9c + d5 . c . 44 . a6 . 9c
d0 70 - 70: 17 % 17 . 8 % d * 5b % 30
d0 23 - 23: d8 + 4b
d0 68 - 68: 18 . 30 . d8
60 . 2b ( 21 )
d3 = d5 . 48 ( )
d0 d3 63 1b :
d9
d5 . 5f = 6 . 79 ( )
60 . 49 ( 21 , d3 )
60 . 3b ( )
d0 14 - 14: 17 . 4b / 1e
d0 38 - 38: d6 % d8 . 7 - 13 + 1e
33 48 ( d5 ) :
d3 = 6 . 79 ( ) - d5 . 5f
d0 d3 < d5 . 25 :
d9 1b
7a :
d0 d3 > d5 . 2a :
d3 = d5 . 2a
d9 d3
d0 66 - 66: bc * bc . 13 . 37 - 13
33 7e ( d5 ) :
46 = 6 . c ( )
d9 57 ( 46 , 2d . 2d ) 4c 46 . bf != d5 . c . bf
d0 96 - 96: 2c % 30 % 3e
33 bd ( d5 ) :
d9 d5 . bf
d0 78 - 78: 3e - 1e * d + 5b + 3 + 3
d0 11 - 11: 3 - d % 7 % 3 / 18 - d
d0 74 - 74: 3 * 2c
65 9f :
b5 = 1b
d0 80 - 80: 1a * d8 / 19
@ b3
33 7d ( b5 ) :
9f . bb ( )
9f . b5 = b5
1d = 6 . 5d ( )
1d . 32 . b9 ( ‘6b’ )
1d . 41 . 59 = a1
9f . 40 ( b5 . bd ( ) )
d0 9 - 9: 1e + 30 % 1e + 37 . 13
d0 31 - 31: 5b + 1a + 1a / d6
@ b3
33 bb ( ) :
d0 9f . b5 63 1b :
d9
1d = 6 . 5d ( )
9f . b5 = 1b
1d . 41 . 59 = ba
1d . 32 . b9 ( ‘7c’ )
d0 26 - 26: bc
@ b3
33 42 ( ) :
d9 9f . b5 63 9d 1b
d0 12 - 12: bc % 18 / 7 % 5b
@ b3
33 40 ( bf ) :
d0 9f . 42 ( ) 4c 9f . b5 . bd ( ) == bf :
9f . b5 . 40 ( )
6 . 95 ( 54 , 91 ( 9f . 40 , bf ) )
d0 29 - 29: bc
d0 23 - 23: 5b . d6
d0 98 - 98: 3e % 18 * b7 * 18
d0 45 - 45: 19 . 18
33 b2 ( d5 , b , 28 , ab , 8e = 1b ) :
b4 = 1 . 3f
d0 53 - 53: 8 + 4b * 30
d0 61 - 61: 37 * 13 / bc . d8 . 18
d0 b4 . 2f ( 1 . aa , 28 ) 4c b :
75 = 6 . c ( )
d0 75 63 1b d2 9f . 42 ( ) :
9f . bb ( )
d9 3c ( d5 , b , 28 , ab , 8e )
9f . 7d ( ae ( 75 ) )
d9
d0 31 - 31: d6 - 13 . 19 % 18 - 2c
d0 b4 . 2f ( 1 . b6 , 28 ) 4c b :
9f . bb ( )
d9 3c ( d5 , b , 28 , ab , 8e )
d0 4 - 4: d6 / 7 . 3
33 4a ( d5 , b , 28 , ab , 8e = 1b ) :
b4 = 1 . 3f
d0 35 - 35: 8 % 4b
d0 70 - 70: 3 * b7
d0 b4 . 2f ( 1 . aa , 28 ) 4c b :
75 = 6 . c ( )
d0 75 63 1b :
9f . bb ( )
d9 69 ( d5 , b , 28 , ab , 8e )
9f . 7d ( ae ( 75 ) )
d9
#85 cd 97 b5 8d
d0 b4 . 2f ( 1 . b6 , 28 ) 4c b :
9f . bb ( )
d9 69 ( d5 , b , 28 , ab , 8e )
d0 66 - 66: bc + 1e + 1e - 37
33 6e ( d5 , b , 28 , ab , 8e = 1b ) :
b4 = 1 . 3f
d0 56 - 56: 7 . 18 * 3 . 18
d0 72 - 72: 3 / 37 * 17 - 19
d0 b4 . 2f ( 1 . aa , 28 ) 4c b :
75 = 6 . c ( )
d0 75 63 1b :
9f . bb ( )
d9 ac ( d5 , b , 28 , ab , 8e )
9f . 7d ( ae ( 75 ) )
d9
d0 15 - 15: b7 + 18 - bc / 13
d0 b4 . 2f ( 1 . b6 , 28 ) 4c b :
9f . bb ( )
d9 ac ( d5 , b , 28 , ab , 8e )
d0 58 - 58: d8 % 1a
d0 71 - 71: 13 + 7 % d8 + b7 - 8
3c = 92 . d4
69 = 22 . d4
ac = 1c . d4
d0 88 - 88: 18 - d % 13
92 . d4 = b2
22 . d4 = 4a
1c . d4 = 6e
d0 16 - 16: 4b * 30 % 8

2. есть список

spisok='0|CommandMapping|02|iI1Ii11111iIi|4|5|BigWorld|iiIIIII1i1iI|ii1II11I1ii1I|9|a|isDown|target|o0OoOoOO00|import|__targetLastShotPoint|10|11|12|OOooOOo|14|15|16|iIiiiI1IiI1I1|OOOo0|oO0o0ooO0|ii11ii1ii|None|StrategicControlMode|o0oO0|oO0ooO|SERVER_TICK_LENGTH|20|Ooo00O00O0O0O|SniperControlMode|23|24|__INSUFFICIENT_TIME_DIFF|26|27|key|29|__MAX_TIME_DIFF|_VehicleGunRotator__updateShotPointOnServer|Iii1I1|Vehicle|projectile_trajectory|isFired|I1IiI|31|soundNotifications|def|OOo000|35|from|ii1I|38|OOooo0000ooo|o00oOoo|_VehicleGunRotator__updateGunMarker|OOO0OOO00oo|SHELL_TRAJECTORY_EPSILON_CLIENT|OO0O0O|g_instance|update|gunRotator|hasAutoAim|collideVehiclesAndStaticScene|typeDescriptor|45|o0o00ooo0|47|__getTimeDiff|_VehicleGunRotator__rotate|O0oo0OO0oOOOo|iIiI|and|LOG_NOTE|collideDynamicAndStatic|__ROTATION_TICK_LENGTH|I1iiiiI1iII|I11i1i11i1I|getOwnVehiclePosition|53|OO0o|O0OoOoo00o|56|isinstance|58|clientMode|OOO0O|Oo|OoOooOOOO|player|AvatarInputHandler|__time|oo00|61|position|is|64|class|66|turretPositions|68|i1II1|ProjectileMover|target_captured|i11iiII|Vector3|O0o0Ooo|ModelHitTester|70|71|72|73|74|o00O|BattleReplay|hullPosition|78|time|else|Math|target_unlocked|add|isTankMarked|Iiii|80|81|IiI1i|constants|functools|intercept|TypeError|__class__|88|O0|__name__|asin|shot|deactivation|event|uuid|90|partial|ArcadeControlMode|__init__|94|callback|96|default|98|gravity|chassis|sin|y|not|length|oOOo0oo|atan2|False|speed|raise|uuid4|fmod|hull|Oo0oO0ooo|math|atan|CMD_CM_LOCK_TARGET|mods|Oo0O0O0ooO0O|instance|ii11i|none|shotPos|computeProjectileTrajectory|oO|staticmethod|ii1i1I1i|autoaim|CMD_CM_LOCK_TARGET_OFF|Ooo00oOo00o|O00ooOO|play|True|remove|iiiii|getId|be|id|getShotAngles|control_modes|OOo0o0|must|inputHandler|debug_utils|785398163|sqrt|vehicleTypeDescriptor|segmentMayHitVehicle|cos|x|o00|the|z|tan|if|pi|or|II|handleKeyEvent|self|ooO0OO000o|2|i11iIiiIii|return'
.split('|')

3. регулярное выражение

regexp = '([0-9a-f]+)'

как можно каждое вхождение заменить на последующий элемент списка

например 1ое вхождение - на первый элемент, 2ое на 2й и т.д.
знатоки помогите, очень хочу разобраться, но знаний немного не хватает

Отредактировано avsv3 (Июль 8, 2014 22:42:55)

Офлайн

#3 Июль 8, 2014 23:51:12

kamisama
Зарегистрирован: 2014-07-08
Сообщения: 34
Репутация: +  4  -
Профиль   Отправить e-mail  

Деобфускация скрипта закодированного с помощью base64+lambda+re.sub

import CommandMapping
import BigWorld, Math
import Vehicle
import uuid
import BattleReplay
import math
from AvatarInputHandler.control_modes import ArcadeControlMode, SniperControlMode, StrategicControlMode
from debug_utils import LOG_NOTE
from functools import partial
from constants import SERVER_TICK_LENGTH, SHELL_TRAJECTORY_EPSILON_CLIENT
from ModelHitTester import segmentMayHitVehicle
from math import pi, sin, cos, atan, atan2, sqrt, fmod, asin, tan
from projectile_trajectory import computeProjectileTrajectory
from projectile_trajectory import getShotAngles
from ProjectileMover import collideDynamicAndStatic, collideVehiclesAndStaticScene
OO0o = (SERVER_TICK_LENGTH / 10)
class ii11i:
    __ROTATION_TICK_LENGTH = SERVER_TICK_LENGTH
    __INSUFFICIENT_TIME_DIFF = 0.2
    __MAX_TIME_DIFF = 0.2
    def __init__(self, target):
        self.id = uuid.uuid4()
        self.target = target
        self.__time = BigWorld.time()
        self.__targetLastShotPoint = None
        if (not isinstance(self.target, Vehicle.Vehicle)):
            LOG_NOTE('class  =       ', self.target.__class__.__name__)
            raise TypeError('target must    be      a       Vehicle instance')
    def update(self):
        O00ooOO = Math.Vector3(self.target.position)
        o0oO0 = BigWorld.player()
        oo00 = o0oO0.gunRotator
        o00 = o0oO0.inputHandler
        Oo0oO0ooo = o0oO0.vehicleTypeDescriptor
        if (O00ooOO is None):
            LOG_NOTE('shotPos        none')
            return
        if (self.__targetLastShotPoint is None):
            o00oOoo = O00ooOO
        else:
            o00oOoo = self.__targetLastShotPoint
        self.__targetLastShotPoint = O00ooOO
        OOooo0000ooo = (o0oO0.getOwnVehiclePosition() - self.target.position).length
        OOo000 = Oo0oO0ooo.shot['speed']
        O0 = Oo0oO0ooo.shot['gravity']
        I11i1i11i1I = ((OOo000 * OOo000) / O0)
        if (OOooo0000ooo <= I11i1i11i1I):
            Iiii = (math.asin(((OOooo0000ooo * O0) / (OOo000 * OOo000))) * 0.5)
        else:
            Iiii = 0.785398163
        OOO0O = ((math.sin(Iiii) * OOo000) / (O0 * 2))
        IiI1i = ((O00ooOO.x - o00oOoo.x) / OO0o)
        OOo0o0 = ((O00ooOO.y - o00oOoo.y) / OO0o)
        O0OoOoo00o = ((O00ooOO.z - o00oOoo.z) / OO0o)
        OoOooOOOO = (O00ooOO.x + (IiI1i * OOO0O))
        i11iiII = (O00ooOO.y + (OOo0o0 * OOO0O))
        I1iiiiI1iII = (O00ooOO.z + (O0OoOoo00o * OOO0O))
        Ooo00O00O0O0O = Math.Vector3(OoOooOOOO, i11iiII, I1iiiiI1iII)
        Ooo00O00O0O0O.y += (self.target.typeDescriptor.chassis['hullPosition'].y + self.target.typeDescriptor.hull['turretPositions'][0].y)
        oo00._VehicleGunRotator__updateShotPointOnServer(Ooo00O00O0O0O)
        II = self.__getTimeDiff()
        if (II is None):
            return
        self.__time = BigWorld.time()
        oo00._VehicleGunRotator__rotate(Ooo00O00O0O0O, II)
        oo00._VehicleGunRotator__updateGunMarker()
    def __getTimeDiff(self):
        II = (BigWorld.time() - self.__time)
        if (II < self.__INSUFFICIENT_TIME_DIFF):
            return None
        else:
            if (II > self.__MAX_TIME_DIFF):
                II = self.__MAX_TIME_DIFF
            return II
    def isTankMarked(self):
        o0o00ooo0 = BigWorld.target()
        return (isinstance(o0o00ooo0, Vehicle.Vehicle) and (o0o00ooo0.id != self.target.id))
    def getId(self):
        return self.id
class oOOo0oo:
    autoaim = None
    @staticmethod
    def add(autoaim):
        oOOo0oo.remove()
        oOOo0oo.autoaim = autoaim
        o0oO0 = BigWorld.player()
        o0oO0.soundNotifications.play('target_captured')
        o0oO0.gunRotator.clientMode = False
        oOOo0oo.update(autoaim.getId())
    @staticmethod
    def remove():
        if (oOOo0oo.autoaim is None):
            return
        o0oO0 = BigWorld.player()
        oOOo0oo.autoaim = None
        o0oO0.gunRotator.clientMode = True
        o0oO0.soundNotifications.play('target_unlocked')
    @staticmethod
    def hasAutoAim():
        return (oOOo0oo.autoaim is not None)
    @staticmethod
    def update(id):
        if (oOOo0oo.hasAutoAim() and (oOOo0oo.autoaim.getId() == id)):
            oOOo0oo.autoaim.update()
            BigWorld.callback(OO0o, partial(oOOo0oo.update, id))
def oO(self, isDown, key, mods, event=None):
    ii1i1I1i = CommandMapping.g_instance
    if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET, key) and isDown):
        o00O = BigWorld.target()
        if ((o00O is None) or oOOo0oo.hasAutoAim()):
            oOOo0oo.remove()
            return OOO0OOO00oo(self, isDown, key, mods, event)
        oOOo0oo.add(ii11i(o00O))
        return
    if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET_OFF, key) and isDown):
        oOOo0oo.remove()
    return OOO0OOO00oo(self, isDown, key, mods, event)
def O0oo0OO0oOOOo(self, isDown, key, mods, event=None):
    ii1i1I1i = CommandMapping.g_instance
    if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET, key) and isDown):
        o00O = BigWorld.target()
        if (o00O is None):
            oOOo0oo.remove()
            return i1II1(self, isDown, key, mods, event)
        oOOo0oo.add(ii11i(o00O))
        return
    if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET_OFF, key) and isDown):
        oOOo0oo.remove()
    return i1II1(self, isDown, key, mods, event)
def O0o0Ooo(self, isDown, key, mods, event=None):
    ii1i1I1i = CommandMapping.g_instance
    if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET, key) and isDown):
        o00O = BigWorld.target()
        if (o00O is None):
            oOOo0oo.remove()
            return Oo0O0O0ooO0O(self, isDown, key, mods, event)
        oOOo0oo.add(ii11i(o00O))
        return
    if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET_OFF, key) and isDown):
        oOOo0oo.remove()
    return Oo0O0O0ooO0O(self, isDown, key, mods, event)
OOO0OOO00oo = ArcadeControlMode.handleKeyEvent
i1II1 = SniperControlMode.handleKeyEvent
Oo0O0O0ooO0O = StrategicControlMode.handleKeyEvent
ArcadeControlMode.handleKeyEvent = oO
SniperControlMode.handleKeyEvent = O0oo0OO0oOOOo
StrategicControlMode.handleKeyEvent = O0o0Ooo

Офлайн

#4 Июль 10, 2014 10:43:05

avsv3
Зарегистрирован: 2014-07-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Деобфускация скрипта закодированного с помощью base64+lambda+re.sub

вау о есть скриптик, чтобы можно было различать имена переменных не только по длинне, а по имени

Офлайн

#5 Июль 10, 2014 12:01:11

kamisama
Зарегистрирован: 2014-07-08
Сообщения: 34
Репутация: +  4  -
Профиль   Отправить e-mail  

Деобфускация скрипта закодированного с помощью base64+lambda+re.sub

не понял вопроса. На вход exec должна подаваться строка с валидной питонограмматикой (поэтому разбирать что там делается в лямбдах смысла не имеет). Эту строку подаешь на вход http://svn.python.org/view/python/trunk/Demo/parser/unparse.py?view=markup который делает форматирование в соответствие со стандартами. Им же легко делать наобходимые тебе преобразования. Например, убрать фиктивный код типа:

if 15-15:
    ...
можно доопределив (в частном случае с этой обфускацией) метод из unparse.py
    def _If(self, t):
        if isinstance(t.test, ast.BinOp):
            if t.test.left.n == t.test.right.n:
                return
        ...

Офлайн

#6 Июль 15, 2014 13:57:38

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

Деобфускация скрипта закодированного с помощью base64+lambda+re.sub

avsv3
вау о есть скриптик, чтобы можно было различать имена переменных не только по длинне, а по имени
Есть такой скрипт для js, который пытается угадать имя по тому, что делает объект.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version