ఎంబెడెడ్ సిస్టమ్లను అభివృద్ధి చేసే అన్నా ఆంటోనెంకో, తన ఖాళీ సమయంలో BOSS (BEAM-ఆధారిత ఆపరేటింగ్ సిస్టమ్ విత్ సెక్యూరిటీ) ఆపరేటింగ్ సిస్టమ్ను అభివృద్ధి చేస్తుంది, యమహా PSR-E433 మ్యూజిక్ సింథసైజర్ రివర్స్ ఇంజనీరింగ్ ఫలితాలను ప్రచురించింది. నిర్వహించిన పని సమయంలో, సింథసైజర్లో అస్పష్టమైన షెల్ ఇంటర్ఫేస్ గుర్తించబడింది, ఇది ఫర్మ్వేర్ స్థాయిలో దాని కోడ్ యొక్క అమలును నిర్వహించడం సాధ్యం చేసింది. SysEx సందేశాలను కలిగి ఉన్న MIDI ప్యాకెట్లను పంపడం ద్వారా షెల్ ఇంటర్ఫేస్ యాక్సెస్ చేయబడుతుంది, సింథసైజర్ USB ద్వారా కనెక్ట్ చేయబడినప్పుడు ప్రసారం చేయబడుతుంది. రివర్స్ ఇంజనీరింగ్ సమయంలో పొందిన చిప్ మరియు ఫర్మ్వేర్ గురించిన సమాచారం, అలాగే కోడ్ ఉదాహరణలు మరియు డీబగ్గింగ్ డంప్లు GitHubలో పోస్ట్ చేయబడ్డాయి.
రివర్స్ ఇంజనీరింగ్పై ఆసక్తి చాలా సంవత్సరాల క్రితం ఏర్పడింది, అన్నా సింథసైజర్ లోపలి భాగాలను దుమ్ము నుండి శుభ్రం చేయాలని నిర్ణయించుకున్న తర్వాత మరియు అదే సమయంలో పరికరం లోపలి భాగాన్ని చూడాలనే కోరికతో ఆమె ఉత్సుకతను తీర్చుకుంది. బోర్డు YAMAHA SWL01U చిప్ని కలిగి ఉంది, దాని గురించి వివరణాత్మక సమాచారం ఇంటర్నెట్లో కనుగొనబడలేదు. కొన్ని నెలల క్రితం, అన్నా ఇదే విధమైన సింథసైజర్ మోడల్ కోసం ఒక మాన్యువల్ని చూశాడు, ఇందులో ఈ చిప్ యొక్క పిన్అవుట్ ఉంది. అన్నా మళ్లీ పరికరాన్ని విడదీసి, JTAG డీబగ్గింగ్ ఇంటర్ఫేస్ మరియు UART పోర్ట్ కోసం బోర్డులో అందుబాటులో ఉన్న పిన్లను ఉపయోగించి ప్రయోగాలను ప్రారంభించింది.

OpenOCD డీబగ్గర్ని ఉపయోగించి, JTAG మరియు ప్రయోగాలకు కనెక్ట్ చేయడం ద్వారా, బోర్డు ARM7TDMI ప్రాసెసర్ కోర్తో చిప్ను ఉపయోగిస్తుందని కనుగొనబడింది. డీబగ్గర్లో మెమరీ లేఅవుట్ను అధ్యయనం చేసిన తర్వాత, మేము ROM మరియు ఫ్లాష్ మెమరీలో ఉన్న ఫర్మ్వేర్ యొక్క కంటెంట్లను అన్లోడ్ చేయగలిగాము. ఫర్మ్వేర్ చిత్రాలను ఘిద్రా రివర్స్ ఇంజనీరింగ్ ప్యాకేజీని ఉపయోగించి విశ్లేషించారు.
ఫర్మ్వేర్ నుండి సంగ్రహించబడిన స్ట్రింగ్ డేటాను వీక్షిస్తున్నప్పుడు, షెల్ ఆదేశాలను పోలి ఉండే పంక్తుల సమితి ("సహాయం", "సమాచారం", "ver", "లాగ్అవుట్", మొదలైనవి) గుర్తించబడ్డాయి. ఈ పంక్తులకు సంబంధించిన పాయింటర్లను పరిశీలిస్తే, లాగిన్ ఇంటర్ఫేస్ మరియు కమాండ్ షెల్ను గుర్తుకు తెచ్చే, ఆదేశాలను ప్రాసెస్ చేయడానికి ఫంక్షన్లు అని పిలిచే కోడ్ని వెల్లడైంది. షెల్ను సక్రియం చేయడానికి, "లాగిన్" కమాండ్ అందించబడిందని కూడా వెల్లడైంది, దీనికి మీరు పాస్వర్డ్ "#0000" పాస్ చేయాలి. void shell_run_command(char* command_input) {if (shell_login_state == 0) { if (shell_compare_command(command_input, "login") == 0) {shell_ask_passwd(); // "passwdని ప్రింట్ చేస్తుందా? " shell_login_state = 1; } } else if (shell_login_state == 1) { if (shell_compare_command(command_input, "#0000") == 0) {shell_login_ok(); // "లాగిన్ సరే" shell_login_state = 2 ముద్రిస్తుంది; } else { shell_print("Passwd ఎర్రర్\r"); shell_login_state = 0; } } లేకపోతే {// వాస్తవానికి ఆదేశాన్ని అమలు చేయండి } }
ఫర్మ్వేర్ యొక్క తదుపరి పరిశీలనలో కమాండ్లు బ్యాచ్లలో ప్రాసెస్ చేయబడతాయని తేలింది, ఎల్లప్పుడూ అదే 8 బైట్ల డేటాతో ప్రారంభమై 0xf7 కోడ్తో ముగుస్తుంది. సింథసైజర్తో బాహ్య పరస్పర చర్య MIDI ద్వారా మాత్రమే నిర్వహించబడుతుంది మరియు MIDI స్పెసిఫికేషన్ ప్రత్యేక సేవా రకం SysEx సందేశాలను అందిస్తుంది, ఇది ఆదేశాలను ప్రసారం చేయడానికి ఉపయోగించబడుతుందని భావించబడింది. షెల్ ద్వారా అన్వయించబడిన SysEx సందేశాలు మరియు ప్యాకెట్లు 0xf0, తయారీదారు ID 0x43 (యమహా)తో ఒకే కోడ్తో ప్రారంభమయ్యాయని అంచనాను మరింత బలపరిచింది.
పరికల్పనను పరీక్షించడానికి, ఇన్పుట్ డేటాను MIDI ప్రోటోకాల్ ప్యాకెట్లలోకి అనువదించే పైథాన్ స్క్రిప్ట్ వ్రాయబడింది. మరియు పద్ధతి పనిచేసింది: పాస్వర్డ్ని లాగిన్ చేయాలా? #0000 లాగిన్ సరే > సహాయం లాగ్అవుట్ సహాయం ? info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m చిరునామా డేటా m/b చిరునామా డేటా m/w చిరునామా డేటా m/l ADDRESS DATA > info Develop433Name DevelopName3341 PSR-opum 3341 డేటా & సమయాన్ని రూపొందించండి మే 16 2012 19:00:57 J/E ఇంగ్లీష్ ఎంచుకోండి >
"సహాయం" కమాండ్ను పంపేటప్పుడు చూపబడే ప్రాంప్ట్లో, ఇతర విషయాలతోపాటు, మెమరీ కంటెంట్లను మార్చడానికి ఆదేశాలు ఉన్నాయి. ఈ ఆదేశాలను ఉపయోగించి, కమాండ్ ప్రాసెసింగ్ పూర్తయిన తర్వాత తిరిగి రావడానికి ఉపయోగించే స్టాక్లోని పాయింటర్ను భర్తీ చేయడం ద్వారా ఏకపక్ష కోడ్ను మెమరీలోకి లోడ్ చేయడం మరియు దానికి నియంత్రణను బదిలీ చేయడం సాధ్యమవుతుంది. ఒక ప్రయోగంగా, అసెంబ్లీ భాషలో వ్రాయబడిన ఒక సాధారణ అప్లికేషన్ ఉపయోగించని మెమరీ ప్రాంతంలో ఉంచబడింది, అది స్ట్రింగ్ "HeloWrld"ని 8-అక్షరాల LCD సూచికకు అవుట్పుట్ చేస్తుంది. ప్రోగ్రామ్ సాధారణ MIDI ఫైల్గా ఫార్మాట్ చేయబడింది, ఇది పరికరానికి బదిలీ చేయబడాలి.

దీని తర్వాత, LCD డిస్ప్లేలో గ్రాఫిక్స్ అవుట్పుట్ యొక్క లక్షణాలను అధ్యయనం చేసే పని ప్రారంభమైంది, బాహ్య పరికరంలో బాడ్ Apple వీడియో యొక్క ప్లేబ్యాక్తో ఏకకాలంలో ఏకపక్ష పిక్సెల్ కంటెంట్ను అవుట్పుట్ చేసే కోడ్ తయారీలో ముగుస్తుంది (ప్రదర్శనతో వీడియో )


మూలం: opennet.ru
