Last active
August 29, 2015 14:07
-
-
Save Subv/1d248662c41b468175ba to your computer and use it in GitHub Desktop.
Opcode Tools for 6.0.2.19034. Finds SMSG opcodes and their handlers. Author: Subv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def CalcJumpTable(opcode) | |
v5 = opcode - 1; | |
if ( ((opcode - 1) & 0x88A) == 2 ) | |
return v5 & 1 | ((v5 & 4 | ((v5 & 0x70 | ((v5 & 0x700 | (v5 >> 1) & 0x7800) >> 1)) >> 1)) >> 1); | |
else | |
return (v5 & 1 | ((v5 & 0x1C | ((v5 & 0x40 | ((v5 & 0x300 | (v5 >> 1) & 0x7C00) >> 1)) >> 1)) >> 1)) + 0x200; | |
end | |
end | |
Table = "loc_5D8126, loc_5DC8B6, loc_5D9069, loc_5DB9A0, loc_5DCFC3, loc_5D97A3,loc_5DCCBE, loc_5DCFC3, loc_5D9765,loc_5DCFC3, loc_5D77EA, loc_5DA0C7,loc_5DCFC3, loc_5DCFC3, loc_5DBE44,loc_5D794E, loc_5DB504, loc_5D9918,loc_5DCFC3, loc_5DCFC3, loc_5DB0A5,loc_5DB95A, loc_5D85B2, loc_5DCFC3,loc_5DCAC6, loc_5DC1F6, loc_5DCFC3,loc_5DA7A6, loc_5DCFC3, loc_5D9BD2,loc_5DB286, loc_5DCC78, loc_5D84E8,loc_5DB83B, loc_5D9B46, loc_5D8A1D,loc_5DC980, loc_5D854D, loc_5DA2D8,loc_5DCFC3, loc_5DA65C, loc_5D79E0,loc_5DCFC3, loc_5DAEEB, loc_5DAFDA,loc_5DCFC3, loc_5D8737, loc_5D86DA,loc_5DC815, loc_5DCFC3, loc_5DCFC3,loc_5D947B, loc_5DCFC3, loc_5DB1BC,loc_5DBB11, loc_5DCFC3, loc_5DCFC3,loc_5DBEA1, loc_5DCFC3, loc_5D809C,loc_5DCFC3, loc_5DCE61, loc_5D8601,loc_5DC6DA, loc_5DAD11, loc_5D9EC1,loc_5DCFC3, loc_5DCFC3, loc_5DCFC3,loc_5D87A4, loc_5DC9ED, loc_5D83DD,loc_5DAA8F, loc_5DB140, loc_5DC04A,loc_5D91A9, loc_5DCFC3, loc_5DCFC3,loc_5D9A10, loc_5DB018, loc_5DAF2F,loc_5D9700, loc_5DA847, loc_5DC425,loc_5DCFC3, loc_5DABF2, loc_5DCFC3,loc_5D950F, loc_5D93A0, loc_5DCFC3,loc_5DAC4F, loc_5D8DC6, loc_5D9F64,loc_5DCFC3, loc_5D79FF, loc_5DB3DD,loc_5D8B67, loc_5D8E6D, loc_5DCA2B,loc_5DCFC3, loc_5D9F3D, loc_5D79C1,loc_5DCFC3, loc_5DCFC3, loc_5DCFC3,loc_5D7BF0, loc_5DC0F3, loc_5D96E1,loc_5D916B, loc_5DCFC3, loc_5DCB61,loc_5DCBFC, loc_5DCC97, loc_5DA57D,loc_5D7DF8, loc_5DCFC3, loc_5DBBD3,loc_5DAA4B, loc_5DCFC3, loc_5DCFC3,loc_5DBBF2, loc_5DCC1B, loc_5D9DB7,loc_5D7EF0, loc_5DBEDF, loc_5DACF2,loc_5DCFC3, loc_5D92F2, loc_5D98D2,loc_5DCFC3, loc_5D959B, loc_5DCF9F,loc_5DB898, loc_5D8E04, loc_5DB221,loc_5DAB70, loc_5DCFC3, loc_5D7C4D,loc_5DC1B8, loc_5D901B, loc_5D82EC,loc_5D8270, loc_5DCFC3, loc_5D9E64,loc_5DCFC3, loc_5DCFC3, loc_5DAC30,loc_5DC363, loc_5DCFC3, loc_5D8313,loc_5DCFC3, loc_5DC7D7, loc_5DCFC3,loc_5D8380, loc_5DB73B, loc_5D87C3,loc_5DA724, loc_5DC406, loc_5DCFC3,loc_5D9435, loc_5D9630, loc_5D9A6D,loc_5D9CF7, loc_5DAEAD, loc_5DCFC3,loc_5DCFC3, loc_5DBB76, loc_5DCFC3,loc_5DCFC3, loc_5D8915, loc_5D8AD5,loc_5DB779, loc_5DCFC3, loc_5D7C0F,loc_5DCFC3, loc_5DCFC3, loc_5DA0A8,loc_5DCFC3, loc_5DB9E6, loc_5DB580,loc_5D9ACA, loc_5DAA07, loc_5D7ED1,loc_5DCFC3, loc_5D81C7, loc_5D7809,loc_5D7991, loc_5D81EC, loc_5D9AE9,loc_5DAC11, loc_5D8620, loc_5DCFC3,loc_5DB459, loc_5DAF6D, loc_5DA38C,loc_5D8785, loc_5DCFC3, loc_5D7CF0,loc_5DCC59, loc_5D863F, loc_5DA909,loc_5D94C1, loc_5D9225, loc_5D792F,loc_5DC510, loc_5DCEC4, loc_5DB5C6,loc_5DC9A7, loc_5D8C58, loc_5D83FC,loc_5DBE82, loc_5D86BB, loc_5D7B2E,loc_5DB037, loc_5D9E20, loc_5DCFC3,loc_5D87E2, loc_5DA743, loc_5D8012,loc_5DCFC3, loc_5DA928, loc_5DCFC3,loc_5DA21E, loc_5DB075, loc_5DCE3A,loc_5DCFC3, loc_5D91E7, loc_5DCFC3,loc_5D8B8E, loc_5DAA6A, loc_5D8807,loc_5D8BCC, loc_5DC637, loc_5DBAD3,loc_5D96A3, loc_5DA19A, loc_5DBCF0,loc_5DC71E, loc_5DAF94, loc_5DC1D7,loc_5DCFC3, loc_5DCFC3, loc_5DCFC3,loc_5D8F49, loc_5DCE9F, loc_5D96C2,loc_5DCFC3, loc_5D8DE5, loc_5DCFC3,loc_5D9255, loc_5DB8F5, loc_5D7DBA,loc_5DCD86, loc_5D9E83, loc_5D90AF,loc_5D8FCD, loc_5DCFC3, loc_5DA0F7,loc_5DCFC3, loc_5D9C7B, loc_5DCFC3,loc_5DB349, loc_5DCFC3, loc_5DCB04,loc_5DC6FF, loc_5DA1FF, loc_5DCFC3,loc_5D7855, loc_5DC27A, loc_5DCFC3,loc_5D8D1A, loc_5DC11A, loc_5DC2E7,loc_5D8145, loc_5DA27B, loc_5DC743,loc_5DB2FB, loc_5DCFC3, loc_5D82AE,loc_5DCFC3, loc_5D8183, loc_5DCFC3,loc_5DC5D2, loc_5D8164, loc_5D9B27,loc_5DCFC3, loc_5DA25C, loc_5D8E8C,loc_5DCFC3, loc_5DCFC3, loc_5DCFC3,loc_5D945C, loc_5DC853, loc_5DA15C,loc_5DAFF9, loc_5DAB51, loc_5D9FE0,loc_5DBBB4, loc_5D9657, loc_5DA3D2,loc_5D8EAB, loc_5DA5BB, loc_5DCFC3,loc_5D8BAD, loc_5D9F83, loc_5D9BAB,loc_5DBA0D, loc_5D9090, loc_5DCFC3,loc_5D7B07, loc_5D7C2E, loc_5DCFC3,loc_5DADFA, loc_5D841E, loc_5DBE25,loc_5DA2B9, loc_5D91C8, loc_5DC3C0,loc_5DA3B3, loc_5D839F, loc_5DA13D,loc_5D95E1, loc_5D8F8F, loc_5D949A,loc_5D9FFF, loc_5DC575, loc_5DCB23,loc_5DCFC3, loc_5D9AAB, loc_5DCFC3,loc_5D8889, loc_5DA335, loc_5D867D,loc_5DCFC3, loc_5D8251, loc_5DC004,loc_5D84AA, loc_5DCFC3, loc_5DCFC3,loc_5DCFC3, loc_5D7AE8, loc_5DB979,loc_5DA083, loc_5DCFC3, loc_5DB523,loc_5DCB80, loc_5D7E74, loc_5DCFC3,loc_5DCFC3, loc_5DA67B, loc_5DCFC3,loc_5DCFC3, loc_5DC199, loc_5DC2A1,loc_5DCFC3, loc_5DA316, loc_5DC694,loc_5DCD1B, loc_5DCCDD, loc_5DCFC3,loc_5DCFC3, loc_5DBA4B, loc_5DB669,loc_5DC5F1, loc_5DC25B, loc_5DB102,loc_5DC08E, loc_5DCFC3, loc_5DCFC3,loc_5DCFC3, loc_5DCFC3, loc_5DBFA7,loc_5DCFC3, loc_5DCFC3, loc_5DB49F,loc_5DCFC3, loc_5D7910, loc_5D95C2,loc_5DA53F, loc_5DBF4A, loc_5DA8AC,loc_5DCFC3, loc_5D973E, loc_5DCE80,loc_5DB933, loc_5D8DA7, loc_5DB3FC,loc_5DA23D, loc_5DC23C, loc_5D8F2A,loc_5DCFC3, loc_5DA435, loc_5DCFC3,loc_5DAD87, loc_5DB6F5, loc_5D7A3D,loc_5DB121, loc_5DCFC3, loc_5DA947,loc_5DA492, loc_5DA2F7, loc_5D9A8C,loc_5D8B48, loc_5D9C18, loc_5D983E,loc_5DB19D, loc_5DCFC3, loc_5DA11E,loc_5DCDA5, loc_5DCFC3, loc_5DCFC3,loc_5DBB95, loc_5D8593, loc_5DCFC3,loc_5DCFC3, loc_5DA55E, loc_5D9F1E,loc_5D89FE, loc_5DCAE5, loc_5D88CF,loc_5DCB42, loc_5DCFC3, loc_5DAFBB,loc_5DCFC3, loc_5DCFC3, loc_5DCFC3,loc_5DB8D6, loc_5DCFC3, loc_5D9B65,loc_5D7C6C, loc_5DCFC3, loc_5DC9CE,loc_5DA4B1, loc_5D865E, loc_5DCFC3,loc_5D820B, loc_5DBC8D, loc_5DB267,loc_5D7AC1, loc_5DA7E4, loc_5DBB30,loc_5DCD42, loc_5D9536, loc_5D7CD1,loc_5DA4FB, loc_5D7FF0, loc_5DAA2C,loc_5DCFC3, loc_5D789B, loc_5D8953,loc_5D85DA, loc_5D8864, loc_5DC3DF,loc_5DCFC3, loc_5D981F, loc_5DCFC3,loc_5D7C93, loc_5DB8B7, loc_5DA5E0,loc_5DC473, loc_5DCFC3, loc_5DCFC3,loc_5D92D3, loc_5D8BF3, loc_5D81A2,loc_5D9FA2, loc_5DACB4, loc_5DCFC3,loc_5DA69A, loc_5DA96C, loc_5DB41B,loc_5DCFC3, loc_5DCFC3, loc_5D8CDC,loc_5DADD5, loc_5D9D54, loc_5DC556,loc_5DA9C9, loc_5DA63D, loc_5DCFC3,loc_5DB75A, loc_5D7A1E, loc_5DCFC3,loc_5DCFC3, loc_5DCAA7, loc_5DA01E,loc_5DCFC3, loc_5DCFC3, loc_5DB2D4,loc_5DC5B3, loc_5DCFC3, loc_5D7F8B,loc_5DC44C, loc_5DBD5B, loc_5DCFC3,loc_5D9C37, loc_5DCA69, loc_5DBC11,loc_5D99CA, loc_5DBEC0, loc_5DCFC3,loc_5DBCAC, loc_5DCA0C, loc_5DC872,loc_5DA35C, loc_5DA1D8, loc_5D848B,loc_5D99F1, loc_5D7B4D, loc_5DB4DD,loc_5D8C12, loc_5DB17E, loc_5DCFC3,loc_5D78E9, loc_5D98F1, loc_5DB4BE,loc_5DB81C, loc_5D8D39, loc_5DB43A,loc_5DC834, loc_5DC344, loc_5DA59C,loc_5DCFC3, loc_5DCFC3, loc_5DC3A1,loc_5D9125, loc_5DBDA1, loc_5DB7BF,loc_5D89DF, loc_5DCFC3, loc_5DCFC3,loc_5DCBBE, loc_5DCFC3, loc_5D9784,loc_5D8C77, loc_5DBAB4, loc_5D9FC1,loc_5DAE69, loc_5DCFC3, loc_5DCFC3,loc_5DAAAE, loc_5D9144, loc_5DCFC3,loc_5D9206, loc_5DB056, loc_5D7874,loc_5DA6FD, loc_5DABD3, loc_5DAB8F,loc_5DCFC3, loc_5D9CD8, loc_5DC8FC,loc_5D7B74, loc_5DAF4E, loc_5DCFC3,loc_5DB1FA, loc_5DC0AD, loc_5DCFC3,loc_5DA768, loc_5DBA8F, loc_5DCFC3,loc_5DCFC3, loc_5DB798, loc_5D7F6C,loc_5D9BF9, loc_5DCEE9, loc_5DCFC3,loc_5DBF69, loc_5D9B08, loc_5D8CFB,loc_5DCFC3, loc_5DCFC3, loc_5DC4F1,loc_5D9EFF, loc_5D8718, loc_5DBE63,loc_5D7D9B, loc_5D7F0F, loc_5D89C0,loc_5D828F, loc_5D7836, loc_5D9DFB,loc_5DCFC3, loc_5DA8EA, loc_5D8464,loc_5DCFC3, loc_5DAE44, loc_5DC14A,loc_5DC325, loc_5D918A, loc_5DCFC3,loc_5DBCCB, loc_5D833A, loc_5DCFC3,loc_5DCFC3, loc_5D8934, loc_5D8359,loc_5DCFC3, loc_5D9285, loc_5D8A4D,loc_5D967E, loc_5D9042, loc_5D843D,loc_5DCDEB, loc_5DCFC3, loc_5DA8CB,loc_5DC17A, loc_5DA3F7, loc_5DBFE5,loc_5D99AB, loc_5DCFC3, loc_5D996D,loc_5D8B2C, loc_5DA454, loc_5DA828,loc_5DCFC3, loc_5D957C, loc_5DAE1F,loc_5DAECC, loc_5D822A, loc_5DA416,loc_5D9DDC, loc_5DACD3, loc_5DCFC3,loc_5DB2AD, loc_5D875E, loc_5DCFC3,loc_5DC789, loc_5DCFC3, loc_5DCFC3,loc_5DCE0A, loc_5DB240, loc_5D7E17,loc_5D8A6C, loc_5DCF43, loc_5DCDCC,loc_5DCD61, loc_5DA29A, loc_5DCFC3,loc_5DCFC3, loc_5DCFC3, loc_5D8CBD,loc_5DC618, loc_5D7A5C, loc_5D7CB2,loc_5DA98B, loc_5DC0CC, loc_5DCFC3,loc_5DB397, loc_5DAACD, loc_5D7FB2,loc_5DC7F6, loc_5D940E, loc_5DCFC3,loc_5DC675, loc_5DC656, loc_5DAD41,loc_5D93DE, loc_5DCFC3, loc_5DC897,loc_5DB688, loc_5DC2C8, loc_5DA88D,loc_5D8D69, loc_5DCFC3, loc_5DCFC3,loc_5DB879, loc_5D84C9, loc_5DCFC3,loc_5DCFC3, loc_5D7A7B, loc_5DC7B0,loc_5D9349, loc_5DC594, loc_5D97C2,loc_5D9D35, loc_5DBD34, loc_5DCFC3,loc_5DA045, loc_5D971F, loc_5D856C,loc_5D90FE, loc_5DCFC3, loc_5DCFC3,loc_5DB1DB, loc_5D9D92, loc_5D7E93,loc_5DB914, loc_5DBD15, loc_5DBF04,loc_5D8C9E, loc_5DCFC3, loc_5DCF67,loc_5DCFC3, loc_5DB3BE, loc_5D90CE,loc_5DA866, loc_5D7D2E, loc_5DCFC3,loc_5D9B8C, loc_5D7D55, loc_5D7DD9,loc_5DA17B, loc_5DAC6E, loc_5DCF08,loc_5DAF0A, loc_5DC215, loc_5D8031,loc_5DBA6A, loc_5DCFC3, loc_5D7EB2,loc_5D8C39, loc_5D9865, loc_5DB0C4,loc_5DBFC6, loc_5DCFC3, loc_5D7D7C,loc_5DCA88, loc_5D82CD, loc_5DA803,loc_5D955D, loc_5D83BE, loc_5DB542,loc_5DA61E, loc_5DCF83, loc_5DB0E3,loc_5D92AC, loc_5DCFC3, loc_5DBDC8,loc_5DC537, loc_5DA787, loc_5DA7C5,loc_5DCFC3, loc_5D850F, loc_5DCCFC,loc_5DC6B3, loc_5DC49A, loc_5DCFC3,loc_5D7FD1, loc_5DB59F, loc_5DC382,loc_5D988C, loc_5D8ECD, loc_5DBE06,loc_5D9E45, loc_5DB85A, loc_5DBF23,loc_5D9D73, loc_5DBA2C, loc_5DB9C7,loc_5DAAEC, loc_5D8845, loc_5D7BD1,loc_5DC306, loc_5DB6A7, loc_5DADAE,loc_5D9EE0, loc_5DCFC3, loc_5DA064,loc_5D80E0, loc_5DABB4, loc_5D86F9,loc_5DCFC3, loc_5D8826, loc_5DCFC3,loc_5DCFC3, loc_5DC4C1, loc_5DB6CE,loc_5DCBDD, loc_5DCC3A, loc_5DA1B9,loc_5D8FAE, loc_5D7E55, loc_5DCFC3,loc_5DCFC3, loc_5DCFC3, loc_5D88B0,loc_5D9C5C, loc_5DB7DE, loc_5DA6DE,loc_5DBB4F, loc_5D97E1, loc_5D852E,loc_5D9D16, loc_5D869C, loc_5D8107,loc_5D9A4E, loc_5D998C, loc_5DCFC3,loc_5D9CB9, loc_5DB64A, loc_5DC942,loc_5D98AB, loc_5DCFC3, loc_5D7F2E,loc_5DCFC3, loc_5D993D, loc_5D8D88,loc_5D88EE, loc_5D7B93, loc_5DCFC3,loc_5DA9AA, loc_5DBC4F, loc_5DB370,loc_5D9379, loc_5DB71C, loc_5D78C2,loc_5DCFC3, loc_5DAB0B, loc_5DC023,loc_5DC961, loc_5DCFC3, loc_5DCFC3,loc_5DC762, loc_5DCFC3, loc_5DBF88,loc_5D8F0B, loc_5DCFC3, loc_5DAD68,loc_5D94E8, loc_5DA9E8, loc_5DCB9F,loc_5DCFC3, loc_5DA520, loc_5DCFC3,loc_5DB7FD, loc_5D8E4E, loc_5D7BB2,loc_5DCFC3, loc_5DCFC3, loc_5DBDE7,loc_5D8999, loc_5D7D0F, loc_5DB5E5,loc_5DCFC3, loc_5DCA4A, loc_5DCFC3,loc_5D8F68, loc_5DBC6E, loc_5DAE8E,loc_5DB561, loc_5DC8DD, loc_5D8AB0,loc_5DAC8D, loc_5DCFC3, loc_5DCFC3,loc_5DCFC3, loc_5DBAF2, loc_5D9C9A,loc_5DCFC3, loc_5DB478, loc_5D7A9A,loc_5D8972, loc_5DCFC3, loc_5D7975,loc_5D93BF, loc_5DCFC3, loc_5DCFC3,loc_5DCFC3, loc_5D9600, loc_5DCFC3,loc_5DCFC3, loc_5DCFC3, loc_5DCFC3,loc_5D8EEC, loc_5D7E36, loc_5D9EA2,loc_5D8B05, loc_5D8E23, loc_5DCFC3,loc_5D80BB, loc_5DCFC3, loc_5DCFC3,loc_5DB322, loc_5DCFC3, loc_5D8FF4,loc_5D9800, loc_5DCF27, loc_5DCFC3,loc_5DBC30, loc_5DC923, loc_5D9A2F,loc_5DCFC3, loc_5DB604, loc_5DCFC3,loc_5DB15F, loc_5DA4D6, loc_5D8058,loc_5DAB32, loc_5D9319, loc_5D8077,loc_5DA5FF, loc_5D7F4D, loc_5DB623,loc_5DC06F, loc_5DBD7A, loc_5DA6B9,loc_5D8A91, loc_5DCFC3, loc_5DA473".split(","); | |
def CalcJumpAddress(offset) | |
return Table[offset]; | |
end | |
def CalcOpcodeFromJTLoc(offset, k = nil) | |
if k == nil | |
for i in 0..(Table.length - 1) | |
if (Table[i].strip == offset) | |
list = [] | |
for j in 0x0..0x1FFF | |
if (i == CalcJumpTable(j)) | |
list << j | |
end | |
end | |
return list | |
end | |
end | |
else | |
list = [] | |
for j in 0x0..0x1FFF | |
if (k == CalcJumpTable(j)) | |
list << j | |
end | |
end | |
return list | |
end | |
end | |
puts "Do you want to brute force opcodes? (y/n)" | |
bruteForce = gets.chomp.strip | |
if bruteForce == "y" | |
for i in 0..(Table.length - 1) | |
opcode = CalcOpcodeFromJTLoc(Table[i], i) | |
puts "Opcode for " + Table[i] + " is " + opcode.to_s | |
if (i == 23) | |
#break; | |
end | |
end | |
end | |
puts "Do you want to calculate an opcode? (y/n)" | |
calcOp = gets | |
if (calcOp.strip! || calcOp) == "y" | |
puts "Type in the location in the jump table" | |
loc = gets.chomp.strip | |
op = CalcOpcodeFromJTLoc(loc) | |
puts "Found opcode: " + op.to_s | |
end | |
puts "Which opcode (In hex)" | |
opcode = gets.to_i(16) | |
puts "Opcode " + opcode.to_s | |
offset = CalcJumpTable(opcode) | |
puts "Offset: " + offset.to_s | |
address = CalcJumpAddress(offset); | |
puts "Address of switch case: " + address.to_s |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment