메뉴 www.fafan.kr
파판 >> NDS게시판
  • 로그인
  • ntrcardhax를 작업해보고 있는데요...
    작성자 : d3m3vilurr | 조회수 : 10331 (2016-06-22 오후 11:58:40)
    ak2i가 도착해서 이것 저것 해보고 있는데요...
    (사는 중간 과정에 여기에 질문했던 추천 판매처는 사기 사이트 였던듯한 함정...;; 돈이 추가로 나갔...)
    일단 ak2i 부트로더를 업데이트 하려면 덤프와 리프래싱 작업이 필요한데, 사실 이게 dsl 만으로 될 줄 알았는데 실제 작업을 해보니, 애가 전원이 인가되어있으면 이미 칩 데이터가 변조 되어서;; 뽑았다 꼽아야 합니다.(전원리셋)

    문제는 이 과정에서 칩에 꼽힌 sd 카드에 연결이 안되게 되고요... 제가 dsi는 또 없어서 이쪽은 확인을 못하게 됩니다..

    작업전에 normmatt에게 질문을 했었는데, 제 추정대로 데이터 덤프가 필요한건 맞는데... 얘가 자기가 짠 코드는 자기께 아닌 코드 베이스(아마도 acekard 의 라이브러리 인듯한..)가 섞여있다고 릴리즈를 못한다고 하네요;;

    어쨌건 얘가 이야기 하길 자기가 짠 덤퍼와 플래셔는 arm9 exploit 위에서 돌아간다고 알려줬었는데요.. 그래서 dsl 이 안되길래 uncart 코드를 약간 수정해서 ds 명령을 날릴 수 있게 작업을 해봤습니다...

    사실 카드가 오기전에 ak2i 부트로더 업데이터를 대충 리버싱을 했었는데... 이쪽 코드를 그대로 쓰지는 또 못할것 같고요;;
    (대충 확장 명령셋들은 분류했는데 명령의미를 아직 못알아 냈고, 기존 명령셋은, 암호화된 데이터를 올려서 또 그대로 쓰질 못합니다..)

    어쨌건 덤프부터 해보고 싶어서 계속 작업을 해보고는 있는데요. 작업을 하려면 부트로더가 올라간 정확한 위치를 알아야 하는데 대충 헤더부터 0x20000 bytes 이겠거니하고 추정했는데, 뜰때마다 값이 달라지는게 뭔가 이 위치가 아닌것도 같네요;;
    (코드가 잘못됐을 수도 있지만....)

    혹시 이 작업을 저 말고도 하시고 계신 분이 있나요? 뇌씨 님이라거나...
    혼자 분석하기에는 좀 어려움이...;;

    PS1. 사실 나중에 테스트 해봐야겠지만, narmmatt가 이야기 한대로 덤프를 한번 떠내고 수정해내면 해당 명령셋을 다른 ak2 나 ak2i 에 이식할 수 있으므로... 이후에 ak2i 용 ds 플래셔를 짜면 3ds arm9 exploit이 없이도 동작 시킬 수 있을 것은 같습니다...
    (위에 작업을 하면서 ds 용 코드도 짜봤는데 한번 3ds 용으로 만들 수만 있으면 그 뒤에 dsl용 프로그램을 짜는것은 어렵지 않을 것 같습니다...)

    PS2. ntrcardhax 의 arm9 exploit은 entry point 가 다른 애들마냥 native firm 버전에 따라서 다릅니다..
    정발의 경우 9.6~9.9, 10.0~10.1, 10.2~10.3 이 각각 같은 native firm 을 사용합니다...
    뉴다수의 9.0~10.3 까지의 모든 포인트를 추출해 놓기 했습니다만....
    기기마다 달라지는지 까지는 확인해보지 못했습니다..

    PS3. dstwo 나 dstwo+ 가 더 쉬울지 ak2i 가 더 쉬울지는 잘 모르겠습니다...
    sdk 만으로 분석을 어디까지 할 수 있냐의 문제이긴 한데 할 수만 있으면 개발 편의는 dstwo 가 더 좋을 것 같기는 합니다.
    단지 참고로 삼을만한 코드(가령 dstwo linux 의 소스코드) 같은게 없고.. gateway mode 앱 같은 형태의 툴을 만들 방법이 아직 안알려져있고, 릴리즈 된 plugin 데이터를 다시 디크립트 해서 리버싱 할 방법을 아직 발견하지 못했습니다;;;
    이대로 가면 진짜 걍 arduino 로 만드는게 더 쉬울것도..;;;;





    글쓰기 | 수정 | 삭제 | 목록   

    Lv.3 뇌씨 (2016-06-23 16:14:56)
    저는 애초에 ak2i자체는 생각을 안해봤어요ㄷㄷ
    DSTWO는 그래도 플러그인 SDK라도 공개되어있으니...
    일단 10.3펌웨어를 구해야 될 것 같은데 10.3을 구할 방법이 없네요ㅠ


    Lv.3 d3m3vilurr (2016-06-23 23:17:11)
    지금 펌웨어가 몇이세요?

    제가 10.1 이후 펌웨어 셋들을 가지고 있긴 한데.. 아마 다운그레이드를 시도하시면 10.3만 정상동작하지 싶긴하네요..
    10.3 자체는 인터넷에도 있었던것 같아요. 다운그레이드 테스트는 안했어서 벽돌 가능성은 계속 존재합니다만....
    Lv.3 뇌씨 (2016-06-24 00:11:08)
    현재 펌은 10.7입니다. ntrcardhax가 10.4 이후로 막힌걸로 아는데 구글 뒤져봐도 잘 보이지가 않네요
    혹시 10.3 펌웨어를 보내주실 수 있나요?
    뉴다수가 현재 침수된 상태여서 하드모드 해도 상관없을 것 같아 하드모드 하고 시도해보려 합니다.
    Lv.3 d3m3vilurr (2016-06-24 13:00:03)
    오늘 퇴근하면 cia 파일들 확인해서 연락드리겠습니다.
    Lv.3 d3m3vilurr (2016-06-25 00:46:44)
    쪽지 확인 부탁드립니다.
    Lv.3 뇌씨 (2016-06-23 18:03:12)
    참고로 제가 생각하는 방법은 Normmatt님의 ntrcardhax에서 헤더 추출 후 틴지보드, 아두이노 혹은 DSTWO에 올리는 방법으로 생각하고 있습니다!(만약 그 ntrcardhax가 정상 작동한다면 가능하겠죠!)
    Lv.3 d3m3vilurr (2016-06-23 23:41:13)
    1. Normmatt에게 문의하기 전에 코드를 보고 예상했던 거지만, 해당 데이터는 매우 일부 정보만이 있습니다.

    * Normmatt 가 대략적으로 풀 구현을 한 것은 맞지만(auto_ntrcardhax 와 arm11 part 양쪽 모두) 정작 ntr card 부분은 ak2i 펌웨어 템플릿의 내용이 빠져있습니다.(repo를 열어보면 128KB가 전부 null 값으로 채워져 있습니다.)
    실제 추정과 같이 Normmatt에게 문의 결과 역시나 해당 부분을 ak2i에서 먼저 추출해야 하며 코드 베이스도 초기 버전 펌웨어야기 때문에 그대로 사용하려면 먼저 다운그레이드를 해야 합니다.

    * 이 이야기를 미루어 생각해보면 ntrcard header 의 arm9 code part가 버전별로 상이하다고 생각되고.. 만약 가장 마지막 펌웨어라면 펌웨어 리버싱을 해서 엔트리 포인트를 찾아야 할것 같습니다..

    * 실제로 작업해보면 해당 코드는 TWL 의 바이너리 코드 부분을 요구하고, 이부분이 n3ds에서는 캡핑되어있기 때문에, 해당 연산을 진행하기 위해 a9lh가 필요했습니다..(덕분에 일판 뉴다수에 a9lh를 올렸지요...)
    https://github.com/d3m3vilurr/ntrcardhax/commit/6df63312ed7 이게 9.0~10.3 까지의 모든 포인트 입니다만, Normmatt가 작업했던 포인트와는 약간 어긋난 것 같아서 기기간 차이가 있는지도 의심되고 있습니다...
    Lv.3 d3m3vilurr (2016-06-23 23:41:50)
    2. 다른 보드에 구현 해 넣으려면 일단 부트로더 스런 코드를 직접 만들어 넣어야 합니다.

    * 틴시나, 노멀아두이노의 경우 이 작업이 상대적으로 편할 수 있는게 직접 데이터를 컨트롤 할 수 있다는 점은 매우 유리한 일이 맞습니다... 단지 상대적으로 hz가 달라서 타이밍 이슈가 생길 수 있고 원하는 시점에 원하는 데이터를 전달해야 하기 때문에 해당 명령 메시지를 명확하게 알고 있어야 합니다...(+ arm asm 을 재생해야 하기때문에 해당 코딩이 가능해야 합니다..)

    * dstwo의 경우 본문에 적은 것처럼, 플러그인에 SDK가 공개되어있으므로 개발이 상대적으로 쉽긴 한데, FPGA 컨트롤 예제는 존재하지 않고, 전원이 떨어져도 플러그인으로 활성화 됐던 데이터를 유지할 수 있는지도 불확정요소입니다..

    이게 중요한 문제인게, 현재 정발 상황에서 어떤 데이터를 선 로딩했었던 상태에서 hbl을 구동시키는 확률은 매우 떨어지고, 3ds가 이 데이터를 얼마나 잘 유지할 수 있는지도 미심쩍은 내용입니다..

    사실 가장 좋은 것은, dstwo의 gateway 3ds로의 변환 로직이 분석되는건데 실제 테스트 했을때는 어딘가에 이 모드에 관한 데이터를 생성해서 집어넣었고, 한번 생성 이후로는 해당 데이터가 지속 이용가능했기 때문입니다...

    그래서 해당 처리 코드를 알고 싶었는데 플러그인은 리버싱이 안되서 makeplg 부터 리버싱 해야 해서 작업하지 않았습니다...(디코딩이 가능할지도 잘 모르겠었고요, 이런걸 다 하느니 어느정도 완성되어있는 ak2i부터 접근하고 나중에 다시 시도하자라는 생각이었죠..)

    --
    버근지 리플이 안달려서 두개로 나눠답니다.
    Lv.3 뇌씨 (2016-06-24 00:34:25)
    제가 대충 소스를 봤었을 때에는 AK2i 펌웨어 파일은 단지 헤더 파일을 쓰기 위해 존재하는 것으로 보였는데, 아마 payload 변수가 0x15E에 CRC값을 쓰는걸로 봐서 payload 변수가 헤더 부분이 아닌가 생각됩니다ㅎ
    타이밍 부분은 일단 좀더 고려해볼 필요가 있을 것 같아요ㄷ
    그래도 리버싱하는 것 보다는 이게 좀더 편리할 것 같아서 틴지보드를 사용하는 쪽으로 생각해보고 있습니다!
    아니면 AK2i의 펌웨어 업데이트 롬의 헤더 부분을 확인한 뒤 덮어 쒸우는 것도 방법이 될 수 있겠죠!
    (펌웨어 업데이트가 어떻게 작동하는건지 몰라서 가능성이 있는지는 모르겠네요)
    Lv.3 d3m3vilurr (2016-06-24 12:59:05)
    해당 데이터가 dsi header인 것은 맞습니다.
    https://github.com/Normmatt/ntrcardhax/blob/db49410/auto_ntrcardhax/auto_ntrcardhax/auto_ntrcardhax.cpp#L125
    https://github.com/Normmatt/ntrcardhax/blob/db49410/auto_ntrcardhax/auto_ntrcardhax/auto_ntrcardhax.cpp#L228
    페이로드 사이즈는 확실히 0x1000 이고 nds 롬의 가장 최상단에 껴들어갑니다.

    문제는 실제 플래시롬일때인데요
    https://github.com/Normmatt/ntrcardhax/blob/db49410/auto_ntrcardhax/auto_ntrcardhax/auto_ntrcardhax.cpp#L231
    이 경우에는 페이로드가 해당 0x2000 에 껴들어가기 때문에 앞부분 의 코드 전체가 필요합니다.
    ak2i 업데이터의 경우, nds에 포함된 실제 플래싱 데이터가 1.4MB쯤 되는데 이 데이터는 address 0x80000 부터 올라가게 되어있습니다.
    이 데이터는 arm 코드가 아니고 그렇게 보면 encrypt 된 데이터 일것이기 때문에... 올라간 뒤에 다시 decrypt되서 어딘가로 올라간다고 볼 수 있을텐데 정확한 주소파악을 아직 못했어요...
    Lv.3 뇌씨 (2016-06-27 17:47:50)
    요즘 시간이 없어서 제대로 확인을 못했네요;;;
    죄송합니다!
    업데이터 같은 경우는 아마 RSA처럼 복잡하지는 않고 아마 XOR같은 간단한 연산으로 되어있을 것 같네요
    아마 각 버전의 차이점을 분석해서 대충 펌웨어 주소를 확인한 뒤 복호화하면 될 것 같습니다.
    +아두이노 듀(84mhz)를 주문해봤습니다.
    DS 카트리지 통신속도가 4.2mhz인걸로 알고있는데 한 바이트당 20사이클이니까 아마 타이밍 걱정은 덜 수 있을 것 같습니다!

    Lv.3 d3m3vilurr (2016-06-29 11:28:29)
    nand 는 잘 고치셨는지 모르겠네요...

    arduino due 좋은 선택일 것 같습니다.
    3.3v arm 20 cycle 이니 c나 asm 코드 짤때의 선택폭도 높을 것 같네요.

    대충 ds cart 한 사이클에 8bit 씩 전송하니....

    다른 alt board 보드는 어떨까도 잠깐 생각해 봤는데 가격(aliexpress 기준 $11~$12, 국내 기준 2.2만원정도..)이랑 재원 생각하면 걍 due 쓰는것도 나쁘지 않을 것 같네요.

    저도 고민한번 해봐야겠네요 :)

    대신 이렇게 되면 진짜 region change 중간 과정에 arm9 execution 을 위한 용도로 밖에 사용할 수 없다는 단점이 생길 것도 같네요.. 그건 아쉬운 점인듯...
    Lv.3 뇌씨 (2016-07-01 00:38:15)
    저도 그 문제가 걸리더라고요ㄷ
    아두이노를 구입해서 카트리지에 납땜하는 작업이 간단한 작업이 아니니깐요ㅠ
    최대한 ak2i를 이용하는 쪽으로 고민해봐야겠죠!
    Lv.3 d3m3vilurr (2016-07-02 12:47:10)
    음 다른 대안으로 teensy3.1이나 3.2를 선택 할 수 있을 것 같습니다.
    틴시보드는 아두이노보다 사이즈가 작으니 카트리지안에 넣을 수는 없어도 적절하게 휴대가능한 형태로 튜닝이 될것 같습니다.
    그리고 teensyduino 가 168mhz로의 오버클럭킹을 지원하기 때문에, 40사이클에 정확히 맞출 수 있겠고요...
    포럼에는 열을 받지 않아서 별도 쿨링은 필요없었다 라고 나오는데 확실하지는 않네요...

    단지 teensy3 이 스펙상 2.7~5v 까지를 인가받을 수 있는데, 이때 정상 클럭이 나올 수 있는지는 모르겠습니다.
    3.3v input시 out volt가 3v가 되는 것도 영향을 줄수도 있겠고요..
    카트리지에 땜질하는건 되려 별로 어렵지 않을 것 같습니다. 칩패턴 다 끊고 1:1로 연결하면 되거든요
    디버깅 편의를 생각하면 클럭 여유가 많은 틴시쪽이 이득이 될것도 같네요.. 그렇다고 해도 시리얼로 덤프 신호를 보내줄 정도로 여유가 될지는 모르겠습니다만...



    도배방지 : 0

    글쓰기 | 수정 | 삭제 | 목록   

     

    <<591592593594595

    Copyright ⓒ FINALFANTASIA.COM All rights reserved.